簡體   English   中英

改變中 <object> IE8中頁面加載時的參數

[英]Changing <object> paramaters at page load in IE8

我有一個帶有嵌入式Flash對象的純HTML網頁。 基於查詢字符串的存在,我想更改對象的參數之一,因此我寫了這樣的內容:

<object  ...>
   <param ...>
   <param ...>
   <script type="text/javascript">
      if (window.location.search.indexOf("stuff")>=0) {
          document.write("<param  variant 1>");
      } else {
          document.write("<param variant 2>");
      }
   </script>
</object>

它在Firefox中運行良好,但是IE8完全不執行js代碼。 我用一個簡單的alert(“ a”)調用替換了整個腳本,而IE8也未執行該調用。 使用開發人員工具,我可以看到該腳本,但是該腳本未突出顯示,也無法在其中設置斷點,因此,我很確定它沒有將其確認為有效腳本。

這是IE限制,還是我缺少什么?

我已經用document.write調用代替了整個方法,並且效果很好,但是我希望更接近我最初的嘗試。

我認為問題出在DOM上,Internet Explorer似乎沒有執行嵌入式JavaScipt。

看來,在初始化之前先等待窗口加載,然后將參數添加為子代(而不是編寫HTML)是正確的方法。

以下各項在Firefox和Internet Explorer中均按預期工作。

<html>
<head>
    <script type="text/javascript">

        listen(window, "load", "onload", initiate);

        // called when the window finishes loading
        function initiate() {
            checkStuff();
        }

        function checkStuff() {

            var myObj = document.getElementById("myObj");
            var elm = document.createElement('param');

            if (window.location.search.indexOf("stuff") >= 0){
                elm.setAttribute("name", "param1");
                elm.setAttribute("value", "true");
            } else {
                elm.setAttribute("name", "param2");
                elm.setAttribute("value", "true");
            }

            myObj.appendChild(elm);
        }

        // just a simple function to attach events to objects
        function listen(obj, event_normal, event_alt, func) {
            if (obj.attachEvent) {
                obj.attachEvent(event_alt, func);
            } else if (obj.addEventListener) {
                obj.addEventListener(event_normal, func, false);
            } else {
                obj.addEventListener(event_normal, func, false);
            }
        }

    </script>
</head>
<body>
    <object id="myObj"></object>
</body>
</html>

如果以正確的DOM方式嘗試它會失敗嗎? 另外,您確定不希望variant="1"而不是"variant 1"嗎? 您在某處不需要name屬性嗎?

<object id="foo"></object> 
<script>
if (window.location.search.indexOf("stuff")>=0) {
    var object = document.getElementById('foo'), param = document.createElement('param');
    param.setAttribute('variant', '1'); // not sure if you want variant=1 or variant=variant AND 1=1
    object.appendChild( param );
} else { /* add the rest */ }
</script>

我刪除了一些html。

我根據您的示例編寫了以下內容:

   <script type="text/javascript">
    window.onload = function() {
      if (window.location.search.indexOf("stuff")>=0) {
          alert("stuff!");
      } else {
          alert("nope!");
      }
     };
   </script>

   <object>
       <param />
       <param />
   </object>

並且它在IE8中可以正常工作。 我做了兩個基本的改動:

  1. 我將腳本移出了HTML,並使其作為與onload事件相關的函數運行。

  2. 我改變了params更有效XHTML,使用<param />代替<param>

這可能不是您要找的答案,但是當涉及到對Flash進行動態處理時,我只是放棄並使用SWFObject 呈現Flash時,發生了太多復雜且非標准的事情,並且在不同的瀏覽器,Flash版本等中也有所不同。因此,依賴外部庫可能不如找到最有效,最簡單的嵌入到給定解決方案的方法優雅情況,但節省了大量時間,以后您不太可能在瀏覽器X中發現它已損壞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM