SWFObject не удается внедрить flash в IE

#javascript #internet-explorer #swfobject

#javascript #internet-explorer #swfobject

Вопрос:

Пытался 4 часа решить эту проблему. У меня действительно странная проблема: SWFObject хорошо встраивает flash во все браузеры, кроме IE. Я напечатал HTML каждого выводимого div-файла в текстовую область и обнаружил, что в IE SWFObject встраивает только тег root «object» без каких-либо внутренних тегов (например, параметр name =»movie» value =»myVal»), поэтому, я думаю, именно поэтому я получаю «movie not loaded» в IE.

Мой код выглядит следующим образом:

 
window.embedFlash=function (properties)
{
    swfobject.addDomLoadEvent(function ()
    {
        swfobject.createSWF(
        {
            data: properties.data,
            width: properties.width||'100%',
            height: properties.height||'100%'
        },
        {
            allowScriptAccess: 'always',
            allowFullScreen: 'true',
            allowNetworking: properties.allowNetworking||'all',
            flashvars: properties.flashvars||null,
            wmode: properties.wmode||null,
            menu: properties.menu||'false'
        },properties.id);
    });
};
  

Ответ №1:

Обычно «фильм не загружен» означает, что экземпляр Flash Player AVM запущен, но указанный вами URL-адрес не может быть найден. Кроме того, ваша SWF-версия может быть не синхронизирована с версией Flash Player в IE.

Проверьте, получаете ли вы какие-либо 404 секунды и доступна ли скомпилированная SWF-версия для запуска в версии FP, установленной в IE.

Комментарии:

1. Это происходит на каждом компьютере, который я пробовал с последней версией flash, так что дело не в этом. Более того, он безупречно работает в других браузерах. Я не получаю 404s, НО я использую относительные пути (ресурсы / flash / myFile.swf) вместо ‘ mydomain.com/resources/flash/myFile.swf ‘. Тем не менее, предоставление полного пути также не помогает.

Ответ №2:

По сути, вы воссоздаете swfobject.embedSWF метод, поэтому я предлагаю переформатировать ваш код для использования swfobject.embedSWF , поскольку он широко поддерживается и тщательно протестирован. Единственные различия, которые я вижу между вашим кодом и embedSWF , заключаются в:

  • отсутствие определения версии в вашем коде (embedSWF требует, чтобы вы указали минимальную версию Flash Player
  • отсутствие expressinstall в вашем коде (для этого можно установить значение false в embedSWF, если вам не интересно
  • ваша переменная flashvars, вероятно, отформатирована как строка, тогда как embedSWF ожидает объект, содержащий пары ключ / значение
  • swfobject.embedSWF по умолчанию вызывается при domload, поэтому вам не нужно писать обработчик ondomload

Вот быстрое переформатирование вашего кода. Произойдет сбой, если ваши flashvars будут отправлены в виде строки:

 window.embedFlash=function (properties)
{

    var flashvars = properties.flashvars||false;
    var params = {
       allowFullScreen: 'true',
       allowNetworking: properties.allowNetworking||'all',
       allowScriptAccess: 'always',
       menu: properties.menu||'false',
       wmode: properties.wmode||"window"
    };
    var attributes = {};

    swfobject.embedSWF(properties.data, 
                       properties.id, 
                       properties.width||'100%', 
                       properties.height||'100%', 
                       "9", 
                       false,//URL for expressinstall, if available 
                       flashvars, 
                       params, 
                       attributes);

};
  

Комментарии:

1. Спасибо за ваш ответ. Тем не менее, предоставленный вами код также не работает в IE. Хотя теперь я получаю «Сообщение: неожиданный вызов метода или доступа к свойству». при вызове swfobject.embedSWF.

2. Решил это! swfobject.js был поврежден после упаковки! оригинальный JS-файл работает просто великолепно! еще раз всем спасибо!

3. @GeverGever …. Святые угодники, у меня тоже сработало. Похоже, что минимальная версия нарушает параметры. В моем случае я передал строку функции во flashVars, и это повредило двойные кавычки. Произошло только в ie.