Изменение произвольных flash-объектов wmode на прозрачный - PullRequest
10 голосов
/ 11 февраля 2009

Мне нужно изменить wmode произвольных flash-объектов на прозрачные из внешнего js-файла, чтобы они не скрывали меню без использования Jquery или подобных библиотек.

В FF я использую getElementsByTagName("embed") и задаю атрибут. Вроде хорошо работает.

В частности, у меня проблемы с object, установленным библиотекой swfObject В IE7.

swfObject создает следующий код в iE7:

<OBJECT id=mymovie height=400 width=134 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000>
        <PARAM NAME="_cx" VALUE="3545">
        <PARAM NAME="_cy" VALUE="10583">
        <PARAM NAME="FlashVars" VALUE="">
        <PARAM NAME="Movie" VALUE="imgs/site/tower.swf">
        <PARAM NAME="Src" VALUE="imgs/site/tower.swf">
        <PARAM NAME="WMode" VALUE="Window">
        <PARAM NAME="Play" VALUE="0">
        <PARAM NAME="Loop" VALUE="-1">
        <PARAM NAME="Quality" VALUE="High">
        <PARAM NAME="SAlign" VALUE="">
        <PARAM NAME="Menu" VALUE="-1">
        <PARAM NAME="Base" VALUE="">
        <PARAM NAME="AllowScriptAccess" VALUE="">
        <PARAM NAME="Scale" VALUE="ShowAll">
        <PARAM NAME="DeviceFont" VALUE="0">
        <PARAM NAME="EmbedMovie" VALUE="0">
        <PARAM NAME="BGColor" VALUE="FFFFFF">
        <PARAM NAME="SWRemote" VALUE="">
        <PARAM NAME="MovieData" VALUE="">
        <PARAM NAME="SeamlessTabbing" VALUE="1">
        <PARAM NAME="Profile" VALUE="0">
        <PARAM NAME="ProfileAddress" VALUE="">
        <PARAM NAME="ProfilePort" VALUE="0">
        <PARAM NAME="AllowNetworking" VALUE="all">
        <PARAM NAME="AllowFullScreen" VALUE="false">
</OBJECT>

Я пытался всеми возможными способами установить wmode на transparent и заставить вспышку не скрывать плавающие объекты без успеха, включая, но не ограничиваясь:

  1. Поиск OBJECT и изменение его PARAM wmode на transparent.
  2. Установить атрибут Object (wmode=transparent)
  3. Вызов функции object SetValue

Кажется, никто не работает. Хотя wmode, кажется, меняется, Flash все еще скрывает другие объекты с высоким z-index. Что мне здесь не хватает?

Ответы [ 5 ]

10 голосов
/ 27 декабря 2009

Я успешно справился с этой маленькой уловкой:

$("embed").attr("wmode", "opaque").wrap('<div>');

Эффективно перерисовывает флеш-объект, работал для меня.

3 голосов
/ 22 декабря 2011

Cirday решение в целом является правильным. Вот не-jQuery-версия, которая работает в IE, FF и Chrome:

var embed = document.getElementsByTagName('embed');
for(var i = 0; i < embed.length; i++){
    embed[i].setAttribute('wmode','opaque');
}
// FF does a "live" array when working directly with elements,
// so "els" changes as we add/remove elements; to avoid problems
// with indexing, copy to a temporary array
var els = document.getElementsByTagName('object');
var obj = [];
for(var i = 0; i < els.length; i++){
   obj[i] = els[i];
}
for(var i = 0; i < obj.length; i++){
    var param = document.createElement('param');
    param.setAttribute('name','wmode');
    param.setAttribute('value','opaque');
    obj[i].appendChild(param);

    var wrapper = document.createElement('div');
    obj[i].parentNode.appendChild(wrapper);

    if(obj[i].outerHTML){
        // IE
        var html = obj[i].outerHTML;
        obj[i].parentNode.removeChild(obj[i]);
        wrapper.innerHTML = html;
    }else{
        // ff/chrome
        obj[i].parentNode.removeChild(obj[i]);
        wrapper.appendChild(obj[i]);
    }
}
2 голосов
/ 11 февраля 2009

Когда вы используете SWFObject для включения флэш-памяти, в методе embedSWF должен быть параметр, называемый «params». Вы передаете ему объект так:

swfobject.embedSwf(blah,blah,blah, { wmode:'transparent'});

больше здесь

1 голос
/ 25 июля 2009

Это не правда, что флэш-фильм необходимо переиздать, чтобы изменить параметр wmode - это миф:

http://www.communitymx.com/content/article.cfm?cid=E5141

У меня та же проблема с меню, и мне нужен код для добавления параметра wmode к любому flash-объекту, вызываемому javascript.

Я думаю, что оригинальный пост относится к этому, но я не уверен, с чего начать, и мне нужно больше информации.

0 голосов
/ 11 февраля 2009

Я почти на 100% уверен, что вы не можете изменить параметр wmode во время выполнения. Я имею в виду, вы технически можете, но не будете иметь никакого эффекта. Я на самом деле удивлен, что у вас есть какие-либо успешные попытки. Какую версию флеш-плеера и браузер вы успешно пробовали?

Извините, я не могу найти официальную ссылку, чтобы доказать свою точку зрения, но я оставлю вам эту очень интересную ссылку о том, как работает wmode (обновлено до игрока 10):

Что означает ускорение графического процессора?

Приветствия

Juan

...