2009-08-18 48 views
2

对于当前的项目,我们使用SwfObject 2.2来嵌入Flash文件,而CRD大师们正在使用SwfAddress 2.3来创建SEO闪存善良。如果你在一个页面上包含了这两个库,那么在API中使用SwfObject回调的任何尝试(http://code.google.com/p/swfobject/wiki/api)都会阻止SwfObject的加载。在这个例子中,你可以简单地通过HTML注释掉SwfAddress文件来切换。SwfAddress与SwfObject的“回调”参数冲突

对不起,我不能指向这两个库在我的代码下面的绝对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> 

任何想法?提前致谢!

+0

对我来说,这解决了一个问题,其中SWFAddress.as externalChange事件没有触发(swf仍然正确嵌入) – user531694 2011-05-10 23:58:47

回答

2

这是一个艰难的。

快速回答:您需要将空的对象,而不是“空”为Flash变量和属性:(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嵌入功能,所以他们可以注入自己的。要做到这一点,他们必须做的一件事是将你传递的所有参数传递给他们自己的功能。 “空”你传递的属性,对象是在这里的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); 
    } 

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

+0

谢谢,那就是它:)我应该想到,因为SwfObject也需要空对象。当我从Adobe文档复制它时,我发现它会起作用。卫生署! – mummybot 2009-09-05 16:34:10

+0

+1。良好的旧的计算器,为我节省了自2008年以来的时间。 – 2012-08-10 14:00:37