ExternalInterface.addCallback不能在Android上使用本地文件

时间:2011-04-05 14:14:29

标签: android flash

我有以下情况:

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服务器并从那里加载到目前为止,但如果可能的话我会避免这样的解决方案。 有谁可以帮助我吗? 感谢。

0 个答案:

没有答案