#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.