我正在开发我的开源项目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程序员的交易,所以如果您需要更多细节,请告诉我.
我正在使用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)
但仍然没有成功.有人有任何想法吗?
所以我有一个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数字.
感谢任何提示,链接或帮助!
这是一个奇怪的问题,但我认为这里的人可能会感兴趣.
是否可以让R导致在另一个程序中打开文件?例如,您是否可以编写一个命令行来导致音乐文件开始播放?潜在的应用是在模型运行完毕后,音乐将开始播放,提醒您模型的完成.
谢谢您的帮助!
在更抽象的层面然后是前一个问题,根据我的经验,有三种方法可以使用AS3从外部.swf调用html页面上的javascript函数:ExternalInterface,fscommand和navigateToURL.
让我们比较和对比这些方法(也许还有其他我没有列出的)并讨论每种方法的优点和缺点 - 现在,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) 我如何使用ExternalInterface将变量传递给javascript函数?
我正在尝试使用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) 在下面的代码中,类型为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
我正在尝试进行一个非常简单的测试,以便为我获取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浏览器中测试它.
我做了一些根本错误的事吗?