Изменение параметров <object>при загрузке страницы в IE8 - PullRequest
0 голосов
/ 22 октября 2009

У меня обычная HTML-страница со встроенным flash-объектом. Основываясь на наличии строки запроса, я хочу изменить один из параметров объекта, поэтому я написал что-то вроде этого:

<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. Я заменил весь сценарий простым вызовом оповещения («a»), который также не был выполнен в IE8. Используя инструмент разработчика, я вижу сценарий, но он не выделен, и при этом я не могу установить в нем точку останова, поэтому я почти уверен, что он не признает его как действительный сценарий.

Это ограничение IE или я что-то упустил?

Я заменил целое на вызовы document.write, и это прекрасно работает, но я бы предпочел что-то ближе к моей первоначальной попытке.

Ответы [ 4 ]

1 голос
/ 22 октября 2009

Я думаю, что проблема заключается в 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>
0 голосов
/ 22 октября 2009

Я написал следующее на основе вашего примера:

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

0 голосов
/ 22 октября 2009

Возможно, это не тот ответ, который вы ищете, но когда дело доходит до выполнения чего-то динамического с Flash, я просто сдаюсь и использую SWFObject . При рендеринге Flash происходит так много сложных и нестандартных вещей, которые варьируются в зависимости от браузера, версии Flash и т. Д. Поэтому полагаться на внешнюю библиотеку может быть менее изящно, чем нахождение наиболее эффективного и минималистичного решения для встраивания в данный файл. ситуация, но экономит много времени, и вы вряд ли узнаете позже, что он не работает в браузере X.

0 голосов
/ 22 октября 2009

Сбой, если вы попробуете это правильным способом 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.

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