我有以下情况:
AS3代码:
...
Security.allowDomain("*");
ExternalInterface.addCallback("onZoom", onZoom);
...
public function onZoom(...
JavaScript代码:
...
alert(getFlashMovie("test"));
alert(getFlashMovie("test").onZoom);
...
在OBJECT和EMBED标签中,我有allowScriptAccess="always"
如果我从我的电脑上测试html页面(“file:///path-to-file.html”),那么
alert(getFlashMovie("test"));
alert(getFlashMovie("test").onZoom);
给我正确的结果。
如果我把我的html和我的swf放在我的Android手机SD卡中,我会把它加载到像这样的WebView中......
webView = (WebView) findViewById(R.id.webViewMain);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setPluginsEnabled(true);
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
webView.setWebChromeClient(new WebChromeClient());
webView.loadUrl("file:///sdcard/test/test.html");
...然后alert(getFlashMovie("test").onZoom);
给我“未定义”。
如果我将html和swf移动到Web服务器,并使用webView.loadUrl("http:/mydomain.com/test/test.html");
加载它就可以了。
我用这个例子做了另一次尝试: http://0me.me/demo/adobeflash/ExternalInterface.call/demo.html
如果我从该URL加载它,它就有效,如果我在我的SD卡上复制那个html文件(以及相关的swf),它就不行。 如果我在我的计算机上复制相同的文件(和swf)并在本地进行测试,那就可以了。
所以似乎计算机的flash播放器允许ExternalInterface.addCallback甚至是本地文件(file:/// ...),而android 10.2的flash播放器则不允许。
我没有尝试在我的Android手机上安装本地Web服务器并从那里加载到目前为止,但如果可能的话我会避免这样的解决方案。 有谁可以帮助我吗? 感谢。