标签: externalinterface

将字节字符串返回到ExternalInterface.call会引发错误

我正在开发我的开源项目Downloadify,直到现在它只是处理返回的字符串以响应ExternalInterface.call命令.

我正在尝试将JSZip和Downloadify放在一起使用测试用例,最终结果是在浏览器中动态创建Zip文件,然后使用保存到磁盘FileReference.save.但是,这是我的问题:

JSZip库可以返回base64Zip 的编码字符串或原始字节字符串.问题是,如果我返回该字节字符串以响应该ExternalInterface.call命令,我会收到此错误:

Error #1085: The element type "string" must be terminated by the matching end-tag "</string>"
Run Code Online (Sandbox Code Playgroud)

ActionScript 3:

var theData:* = ExternalInterface.call('Downloadify.getTextForSave',queue_name);
Run Code Online (Sandbox Code Playgroud)

哪里queue_name只是一个用于标识JS中正确实例的字符串.

JavaScript的:

var zip = new JSZip();
zip.add("test.txt", "Hello world!\n");
var content = zip.generate(true);
return content;
Run Code Online (Sandbox Code Playgroud)

如果我改为返回普通字符串而不是字节字符串,则调用正常.base64我想避免使用,因为我必须base64在我的包含解码器,swf这将增加其大小.

最后:我不是在寻找AS3 Zip发生器.我的项目必须使用JavaScript运行该部分

我确实不是 AS3程序员的交易,所以如果您需要更多细节,请告诉我.

javascript flash bytearray actionscript-3 externalinterface

8
推荐指数
1
解决办法
1755
查看次数

使用jquery调用AS3 ExternalInterface

我正在使用ExternalInterface调用嵌入在html页面中的flash应用程序.以下代码工作正常(我正在使用按钮进行测试):

$(document).ready(function(){
    $("#button").click(function(){
        var app = document.getElementById('ApplicationID')
        console.debug(app)
        app.pageUnloading()
    })
})
Run Code Online (Sandbox Code Playgroud)

所以这调用flash应用程序并打印:

<embed id="ApplicationID" width="600" height="400" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" allowscriptaccess="sameDomain" name="FlexMoeders" bgcolor="#cccccc" quality="high" src="ApplicationID.swf">
Run Code Online (Sandbox Code Playgroud)

但是当我使用jquery $#方法获取id的元素时,我会收到一个不同的对象:

$(document).ready(function(){
    $("#button").click(function(){
        var app = $("#ApplicationID")
        console.debug(app)
        app.pageUnloading()
    })
})
Run Code Online (Sandbox Code Playgroud)

当我使用它时,我被告知:

app.pageUnloaded is not a function
Run Code Online (Sandbox Code Playgroud)

并打印以下内容:

[embed#ApplicationID] 
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

var app = $("#ApplicationID").val()

var app = $("#ApplicationID").get(0)
Run Code Online (Sandbox Code Playgroud)

但仍然没有成功.有人有任何想法吗?

flash jquery actionscript-3 externalinterface

7
推荐指数
2
解决办法
5652
查看次数

如何从Flash AS3中的URL获取/获取变量

所以我有一个URL,我需要我的Flash电影从中提取变量:

示例链接:http://www.example.com/example_xml.php?aID = 1234&
bID = 5778

我需要获取aID和bID号码.

我可以通过ExternalInterface将完整的URL转换为String

var url:String = ExternalInterface.call("window.location.href.toString");
if (url) testField.text = url;
Run Code Online (Sandbox Code Playgroud)

只是不确定如何操纵String来获取1234和5678数字.

感谢任何提示,链接或帮助!

flash url split actionscript-3 externalinterface

7
推荐指数
1
解决办法
1万
查看次数

R可以导致另一个程序打开文件吗?

这是一个奇怪的问题,但我认为这里的人可能会感兴趣.

是否可以让R导致在另一个程序中打开文件?例如,您是否可以编写一个命令行来导致音乐文件开始播放?潜在的应用是在模型运行完毕后,音乐将开始播放,提醒您模型的完成.

谢谢您的帮助!

r externalinterface

7
推荐指数
3
解决办法
413
查看次数

Actionscript3到JavaScript的沟通:最佳实践

在更抽象的层面然后是前一个问题,根据我的经验,有三种方法可以使用AS3从外部.swf调用html页面上的javascript函数:ExternalInterface,fscommand和navigateToURL.

让我们比较和对比这些方法(也许还有其他我没有列出的)并讨论每种方法的优点和缺点 - 现在,ExternalInterface 似乎是灵活性的方式,但是它适合所有情况吗?在执行速度方面是否有具体的好处或类似的东西?我很好奇 - 我们怎么想?

javascript actionscript-3 externalinterface

6
推荐指数
2
解决办法
5031
查看次数

在Google Chrome中访问ExternalInterface公开方法时遇到问题

我的简单ActionScript我试图使用Flash的ExternalInterface来设置回调,以便JavaScript可以调用我的Flash对象上的方法.在Safari,Firefox和IE中一切正常,但我无法让Chrome正常工作.当我在Chrome上试用代码时,出现以下错误:

未捕获的TypeError:Object#<an HTMLObjectElement>没有方法'setText'

这是我正在使用的示例HTML(再次,在Safari,FF和IE中正常工作)

<html><body>
<div id="mycontent"></div>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>
<script type="text/javascript">
swfobject.embedSWF("http://invincible.dynalias.com:8080/HelloWorld.swf", "mycontent", "400", "420", "9.0.0","expressInstall.swf", {}, {allowScriptAccess:'always'},{id:'hw',name:'hw'});

function getFlash(movieName) {
   return ( navigator.appName.indexOf("Microsoft") != -1) ? window[movieName] : document.getElementById(movieName);
}
</script><p>
  <input type="text" id="exampleText" /> <input type="button" value="Set Text" onclick="getFlash('hw').setText(document.getElementById('exampleText')
.value)" />
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

这是ActionScript ......

package {
  import flash.display.Sprite;
  import flash.text.TextField;
  import flash.external.ExternalInterface;
  import flash.system.Security;

  public class HelloWorld extends Sprite {

    private var textField:TextField = new TextField();
    public function HelloWorld() {
      Security.allowDomain("*");
      ExternalInterface.addCallback("setText", this.setText);
      textField.text …
Run Code Online (Sandbox Code Playgroud)

javascript flash google-chrome externalinterface

6
推荐指数
2
解决办法
2万
查看次数

6
推荐指数
1
解决办法
7472
查看次数

通过Javascript访问ActionScript函数

我正在尝试使用ExternalInterface.addCallbackAPI 调用动作脚本中的函数,但我似乎无法让它工作.这就是我所拥有的:

动作脚本:

//MyClass.as  
package {

    import flash.display.Sprite;
    import flash.external.ExternalInterface;

    public class MyClass extends Sprite
    {
        public function MyClass()
        {
            ExternalInterface.addCallback('getStringJS', getStringAS);
        }

        public function getStringAS():String
        {
            return "Hello World!";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:如果重要的话,我正在使用flex mxmlc编译器将其编译为swf.

HTML/JavaScript的:

<!doctype html>
<html>
    <head>
        <title>User Identification</title>
    <head>
    <body>
        <object id="MyClass" name="MyClass" type="application/x-shockwave-flash" data="MyClass.swf" width="1" height="1">
            <param name="movie" value="MyClass.swf">
            <embed src="MyClass.swf" width="1" height="1">
        </object>
        <script type="text/javascript">
            var flash = document.getElementById("MyClass");
            var str = flash.getStringJS();
            alert(str);
        </script>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

Uncaught TypeError: Object #<HTMLObjectElement> …
Run Code Online (Sandbox Code Playgroud)

javascript actionscript externalinterface nomethoderror

6
推荐指数
1
解决办法
6062
查看次数

R .call()接口和EXTPTRSXP:了解外部分配的对象的PROTECT/UNPROTECT

在下面的代码中,类型为foo的对象是通过调用foo_new()创建的,而对象的外部指针则返回给R.后续计算通过传递ptr_foo来执行.最终通过显式调用foo_free(foo*X)释放该对象.所有计算都由libfoo执行.

创建ptr_foo的事实是否意味着foo对象中的所有其他动态分配的字段都会自动受到保护?或者,垃圾收集器可能会扫除诸如"bar"之类的字段吗?

SEXP foo_new (SEXP n) {
    SEXP ptr_foo;
    foo *X = (foo*) foo_new( 1, sizeof(foo) );
    //foo is protected from garbage collection
    assert( X );
    X->bar = (int*) foo_add_bar(INTEGER_VALUE(n));
    //Is bar protected from garbage collection?
    assert(X->bar);
    PROTECT( ptr_foo = R_MakeExternalPtr(X, install("extptr_foo"), R_NilValue) );
    R_RegisterCFinalizerEx( ptr_foo, ptr_foo_finalize, 1 );
    UNPROTECT( 1 );
    return (ptr_foo);
} 
Run Code Online (Sandbox Code Playgroud)

谢谢,

RT

c memory-management r externalinterface

6
推荐指数
1
解决办法
1201
查看次数

Flash/AS3:ExternalInterface.call()"为什么你没有console.log?"

我正在尝试进行一个非常简单的测试,以便为我获取AS3 ExternalInterface.call()到Javascript console.log().

我在顶层有一个简单的带有AS3的SWF和一个触发呼叫的按钮.

import flash.external.ExternalInterface;

function log(message:String):void
{
    trace (message);
    if (ExternalInterface.available)
    {
        ExternalInterface.call('console.log', message);
    }
}

button.addEventListener(MouseEvent.CLICK,button_click);

function button_click(e:MouseEvent):void
{
    log("Hello World");
}
Run Code Online (Sandbox Code Playgroud)

我已经在Flash IDE中对此进行了测试,以确保按钮单击是跟踪,它是.我一直在最新的Chrome和Firefox浏览器中测试它.

我做了一些根本错误的事吗?

javascript flash actionscript-3 externalinterface

5
推荐指数
1
解决办法
1万
查看次数