【问题标题】:FireFox & flash extensions i have problem with externalInterface (FireFox 和 flash 扩展我有 externalInterface 的问题(
【发布时间】:2011-04-19 16:49:14
【问题描述】:

如何与我的 Flash 应用程序通信?我在我的扩展闪存中加载 有些是这样的

myDiv.innerHTML = <object…><param allowScriptAsses… etc … 
flash load fine !!! now, i trace my externalInterface method 
var flashObject = document.get…("myFlash")
alert(flashObject) <- okey - [embedHtmlObject … 
alert(flashObject.myExternalMethod) <- native function its okey !!! 
try excute 
flashObject.myExternalMethod() and NOTHING !!! ((( externalMEthod not invoked !!! this problem ONLY on windows 7 in fireFox ! 

在 mac os 和 firefox 上,我使用 wrapedObject 和 externalInterface 工作正常!但是如果我尝试在 Windows 系统上使用 wrapedObject - 我有错误(((

如何在 firefox 的 windows 上正确使用 ExternalInterface?

【问题讨论】:

  • 首先不要使用innerHTML来嵌入flash。第二次使用 SWFObject。第三,在访问 swf 中的回调方法之前,确保 flash 应用程序已完全加载。
  • 我不能使用 SWFObject(不真实 - 我在打开的浏览器或打开选项卡中的当前打开页面上注入我的 flashObject - SWFObject 只能注入当前文档!我当前的文档!= 在打开的浏览器中的文档)我的 Flash 应用程序已满载!我保证 !有没有人有什么想法?
  • 现在你简直把我搞糊涂了。您正在使用 javascript 在浏览器选项卡/文档之间进行对话吗? SWFObject i9s 是一种嵌入 flash 的方法,如果您有目标容器“myDiv”,那么您可以使用 SWFObject 嵌入它
  • 我现在但是 SWFObject 嵌入在当前文档中! SWFOBJECT 在当前文档中搜索容器“myDiv”!我的闪存嵌入不是 currentDocument !我为 FF 开发扩展,我的扩展在打开的网页中嵌入了 flash 对象! swfObject 在我的扩展中工作,在我的扩展中工作!= 在打开的网页中的文档
  • 啊我现在明白了。我敢打赌,这是您在初始化和完成加载之前尝试访问 swf 的问题。在尝试访问它之前尝试暂停几秒钟。

标签: flash firefox windows-7 externalinterface


【解决方案1】:

首先您需要向 ActionScript 代码添加回调:

flash.external.ExternalInterface.addCallback("myExternalMethod", doSomething);

function doSomething():void
{
//your code
}

如果您使用 swfObject 嵌入您的 Flash 电影,您可以使用 swfobject.getObjectById 来检测您的 swf 并调用您的方法。

swfobject.getObjectById("myFlash").myExternalMethod();

如果您不使用 swfObject,只需复制并粘贴 JS 代码中的 getObjectById 方法即可:

function getObjectById(objectIdStr) {
        var r = null;
        var o = getElementById(objectIdStr);
        if (o && o.nodeName == "OBJECT") {
            if (typeof o.SetVariable != UNDEF) {
                r = o;
            }
            else {
                var n = o.getElementsByTagName(OBJECT)[0];
                if (n) {
                    r = n;
                }
            }
        }
        return r;
    }

然后调用它:

getObjectById("myFlash").myExternalMethod();

看看这个,我其实在我的博客上写了一个小例子:http://www.nelsond8.com/?p=515

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    相关资源
    最近更新 更多