HTML-страница iframe с флэш-контентом создает проблему для выпадающего меню - PullRequest
0 голосов
/ 19 июня 2011

У меня есть iframe на страницу, где работает Flash SWF-файл; у кого-нибудь есть идея, как сделать его прозрачным, чтобы мое раскрывающееся меню отображалось идеально? Пожалуйста, примите к сведению, что я не могу редактировать исходную страницу (добавьте param = wmode, value = transparent к объекту Flash), только если на моей странице есть возможность сделать это с помощью iframe или некоторого JavaScript, я уже попробовал allowtransparency="true" и background-color="transparent".

Ответы [ 4 ]

1 голос
/ 19 июня 2011

Вы можете временно скрыть вспышку, содержащую div, пока меню открыто.Используйте javascript для установки flashDiv.style.display = "none"; при открытии меню и возврата его на flashDiv.style.display = "block" при закрытии меню.

0 голосов
/ 26 июня 2011

Код для index.html выглядит следующим образом:

<script type="text/javascript" src="files/swfobject.js">//</script>
<script type="text/javascript" src="files/swfaddress.js">//</script>
<script type="text/javascript" src="files/facebook.js">//</script>
   <script type="text/javascript">

 var assetsFolder = 'assets';
  var mobileFolder = 'mobile';

  var changeURL = function(){
    if(document.getElementById('hrefMobile'))document.getElementById('hrefMobile').href = dir+mobileFolder+'/index.html';
    if(document.getElementById('hrefSEO'))document.getElementById('hrefSEO').href = dir+assetsFolder +'/seo/toc.html';
    delete changeURL;
  }
  if (document.addEventListener){
document.addEventListener("DOMContentLoaded", changeURL, false);
} else {
document.attachEvent("onDOMContentLoaded", changeURL);
} 

  function afterLoad(){ 
    checkPage(); 
    setFocusOnFlash(); 
      }

  function setFocusOnFlash(){ 
        var f=swfobject.getObjectById('content');

                    if (f) { f.tabIndex = 0; f.focus(); } 

                  }
      function getURLParam()
      {
      var returnObject = {};
      var href = window.location.href;
      if ( href.indexOf("?") > -1 )
      {
      var param = href.substr(href.indexOf("?"));
               var arrayParam = param.split("&");
  returnObject['assets'] = assetsFolder;
      for ( var i = 0; i < arrayParam.length; i++ )
                {
                    var value = arrayParam[i].split("=");
                    returnObject[value[0]] = value[1];
                }
        }
        return returnObject;
    }
    var dir = "./files/";


     var getURI = function(){
            var URIArray = document.location.href.split('/');

             URIArray.length = URIArray.length-1;
            var URIstr = URIArray.join('/');

            URIArray = null;

            var URIarr = dir.split('/');
            URIarr[0] = URIarr[0]=='.'?'':URIarr[0];
            var dirStr = URIarr.join('/');

            URIstr = URIstr+dirStr;

        return URIstr;
        }



      var swfName = "flippingbook.swf?rnd=44c3b8c18caec0e3862101a6d4de273f";

     var ua = navigator.userAgent.toLowerCase(),
      platform = navigator.platform.toLowerCase(),
      UA = ua.match(/(opera|ie|firefox|chrome|version)[\s\/:]([\w\d\.]+)?.*?(safari|version[\s\/:]([\w\d\.]+)|$)/) || [null, 'unknown', 0],
      mode = UA[1] == 'ie' && document.documentMode;

      var Browser = {
      extend: Function.prototype.extend,
      name: (UA[1] == 'version') ? UA[3] : UA[1],
      version: mode || parseFloat((UA[1] == 'opera' && UA[4]) ? UA[4] : UA[2]),
      Platform: {
      name: ua.match(/ip(?:ad|od|hone)/) ? 'ios' : (ua.match(/(?:webos|android|bada|symbian|palm|blackberry)/) || platform.match(/mac|win|linux/) || ['other'])[0]
      },
      Features: {
      xpath: !!(document.evaluate),
      air: !!(window.runtime),
      query: !!(document.querySelector),
      json: !!(window.JSON)
      },
      Plugins: {}
      };

      if(Browser.Platform.name == 'android' || Browser.Platform.name == 'ios') window.location = dir+mobileFolder+"/index.html";
      if(Browser.Platform.name == 'webos' || Browser.Platform.name == 'bada' || Browser.Platform.name == 'symbian' || Browser.Platform.name == 'palm' || Browser.Platform.name == 'blackberry') window.location = dir+assetsFolder+"/seo/page1.html";

      var flashvars = getURLParam();

     var params = {baseURI: getURI(), base: dir, allowFullScreen: true, allowScriptAccess: "sameDomain", quality: "high", scale: "noscale",bg:"transparent" };

      var attributes = {align: "middle" };

      swfobject.embedSWF(dir + swfName, "content", "100%", "100%", "10.0.0", dir + "expressInstall.swf", flashvars, params, attributes);



      </script>
0 голосов
/ 19 июня 2011

Я бы посоветовал вам увеличить значение свойства style.zIndex в раскрывающемся меню, чтобы оно могло отображаться перед iframe, даже если оно не прозрачно.Но это просто идея, я не знаю, сработает ли это.

Чтобы попробовать это, поскольку браузеры игнорируют свойство style.zIndex для непозиционируемых элементов, ваше выпадающее меню должно иметь style.position с "relative" или "absolute".

РЕДАКТИРОВАТЬ: я мог видеть, что вы сейчас пытаетесь добавить функцию makeWmode в вашу версию swfobject.js.Конечно, я надеюсь, что ваш код будет работать, но в остальном вот мой, если я могу вам помочь ...

function makeWMode(id, mode) {  // id: the id of the <object> tag of the Flash object; in this case I think it is "content"
    var object = swfobject.getObjectById(id);
    var params = object.getElementsByTagName("param");
    var success = false;
    for (var i = 0; i< params.length; i++) {
        if (params[i].name.toLowerCase() == "wmode") {
            params[i].value = mode;
            success = true;
            break;
        }
    }
    if (success == false) {
        var param = document.createElement("param");
        param.name = "wmode";
        param.value = "transparent";
        object.appendChild(param);
        success = true;
        return success;
    }
}

Использование makeWMode("content", "transparent") добавило тег <param name="wmode" value="transparent"> к тегу object, ноон может не работать с тегом embed.

0 голосов
/ 19 июня 2011

извините, но нет способа сделать это.если у вас нет контроля над страницей, показывающей страницу, и вы не добавите параметр wmode = transparent.это одна из самых больших проблем с тех пор, как в сети появилась флеш-память.Вы можете написать электронное письмо владельцу флеш-страницы и попросить его добавить этот параметр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...