2009-08-18 5 views
2

Для текущего проекта мы используем SwfObject 2.2 для встраивания флеш-файлов, а гуру CRD используют SwfAddress 2.3 для создания совершенства SEO flash.Конфликт SwfAddress с аргументом «обратного вызова» SwfObject

Оказывается, если у вас есть обе библиотеки, включенные на страницу, то любые попытки использования обратного вызова SwfObject в API (http://code.google.com/p/swfobject/wiki/api) предотвращают загрузку 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> 

Любые идеи? Заранее спасибо!

+0

Для меня это решило проблему, когда событие SWFAddress.as externalChange не запускалось (swf все еще правильно встраивался) – user531694

ответ

2

Это был тяжелый вопрос.

Быстрый ответ: Вам необходимо пройти пустые объекты, а не «нулевой» для Flashvars и атрибуты: (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, я просто решил, что это сработает. Doh! – mummybot

+0

+1. Хороший старый stackoverflow, экономя время с 2008 года. –

 Смежные вопросы

  • Нет связанных вопросов^_^