javascript - SwfAddress 与 SwfObject 的 'callback' 参数冲突

标签 javascript callback swfobject conflict swfaddress

对于当前的项目,我们正在使用 SwfObject 2.2 来嵌入 flash 文件,而 CRD 专家正在使用 SwfAddress 2.3 来创建 SEO flash goodness。

事实证明,如果页面上包含这两个库,那么在 API ( http://code.google.com/p/swfobject/wiki/api) 中使用 SwfObject 回调的任何尝试都会阻止 SwfObject 加载。在示例中,您可以通过 HTML 注释掉 SwfAddress 文件来简单地切换它。

抱歉,我无法在下面的代码中指向这两个库的绝对 URL。

<head>
    <title>SWFObject 2.2 dynamic embed with callback</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <script type="text/javascript" src="swfobject.js"></script>
    <script type="text/javascript" src="swfaddress.js"></script>
    <script type="text/javascript">
    function outputStatus(e) {
        alert("e.success = " + e.success +"\ne.id = "+ e.id +"\ne.ref = "+ e.ref);
    }
    var params = {};
    params.allowscriptaccess = "always";

    swfobject.embedSWF("http://www.bobbyvandersluis.com/swfobject/testsuite_2_2/test6.swf", "myContent1", "300", "120", "9.0.0", "expressInstall.swf", null, null);
    swfobject.embedSWF("http://www.bobbyvandersluis.com/swfobject/testsuite_2_2/test6.swf", "myContent2", "300", "120", "9.0.0", "expressInstall.swf", null, params, null, outputStatus);
    </script>
</head>

<body>
    <div id="myContent1">
        <h1>Alternative content</h1>
        <p><a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>
    </div>
    <div id="myContent2">
        <h1>Alternative content</h1>
        <p><a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>
    </div>
</body>

有什么想法吗?提前致谢!

最佳答案

这是一个艰难的过程。

快速回答:您需要为 flashVars 和属性传递空对象而不是“null”:( See my corrected demo code here )

swfobject.embedSWF("http://www.bobbyvandersluis.com/swfobject/testsuite_2_2/test6.swf", "myContent1", "300", "120", "9.0.0", "expressInstall.swf", {}, {});
swfobject.embedSWF("http://www.bobbyvandersluis.com/swfobject/testsuite_2_2/test6.swf", "myContent2", "300", "120", "9.0.0", "expressInstall.swf", {}, params, {}, outputStatus);

完整答案:深入研究 SWFAddress 源代码,他们正在重写 SWFObject 嵌入功能,以便他们可以注入(inject)自己的功能。为此,他们必须做的一件事是将您传入的所有参数传递给他们自己的函数。您为属性对象传递的“null”导致此处的 SWFAddress 代码出错:

var _s2e = swfobject.embedSWF;
    swfobject.embedSWF = function() {
    _args = arguments;
    if (typeof _args[8] == UNDEFINED)
        _args[8] = {};
    if (typeof _args[8].id == UNDEFINED)
        _args[8].id = _args[1];  // <-- ERROR here when this parameter (attributes) is null.
        _s2e.apply(this, _args);
        _ref.addId(_args[8].id);
    }

错误导致整个第二次嵌入失败。

关于javascript - SwfAddress 与 SwfObject 的 'callback' 参数冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1296662/

相关文章:

c++ - postgresql查询c++回调

reactjs - History.push 在获取回调中不起作用

javascript - 奇怪的 Firefox SWFObject 显示问题

javascript - Safari 6.1 和 7 上的 SWFObject, "Don' t 信任 Flash"选项

javascript - 在图像上滑动

javascript - 如何知道映射内的对象是否具有值

javascript - 鼠标光标根据事件变化

javascript - 如何在javascript中分割一个大整数

java - 如何将回调转换为 Promise

c# - 播放 .flv 文件时找不到视频或访问被拒绝