【发布时间】:2010-11-29 00:48:10
【问题描述】:
我的简单动作脚本 我正在尝试使用 Flash 的 ExternalInterface 设置回调,以便 JavaScript 可以调用我的 Flash 对象上的方法。在 Safari、Firefox 和 IE 中一切正常,但我无法让 Chrome 正常工作。当我在 Chrome 上尝试代码时,出现以下错误:
未捕获的类型错误:对象#
没有方法 '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>
这里是 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 = "Hello, world!";
addChild(textField);
}
public function setText(text:String):void {
this.textField.text = text;
}
}
}
【问题讨论】:
-
与你的问题无关,但你真的应该删除那个讨厌的
navigatorsniff。 -
实际上,我 Mac 上的 Chrome 并没有抛出任何错误(并且似乎正确设置了文本)
-
你说得对,它在我的 Mac 上的 Chromium 上也同样适用于我。只是不是 Windows 上的 Chrome
-
我知道已经有一段时间了,但我在 Windows 上的 Chrome 中仍然遇到同样的问题,我偶然发现了这篇文章。你有没有为此想出解决方案?
-
不,没有人想出解决方案。
标签: javascript flash google-chrome externalinterface