Можно ли установить src для iframe и впоследствии манипулировать его содержимым? - PullRequest
1 голос
/ 02 марта 2011

Моя цель состоит в том, чтобы родительская страница изменила src iframe с пустого на свой правильный url (чтобы использовать обработчик загрузки в iframe в данной точке, но это не относится к этой точке), а затем манипулировала содержимым iframe , Тем не менее, javascript, кажется, не замечает никаких элементов iframe, которые отсутствуют в его src при загрузке DOM. Есть ли способ обойти это?

setTimeouts предназначены для загрузки DOM и iframe. редактировать: исправлены некоторые вещи. Вот содержащая страница:

<html><head>
    <script type="text/javascript">
        var done = false;
        var theIframe;
        window.onload = function () {
            setTimeout('stuff()', 2000);
            clearTimeout('stuff()');
        }

        function stuff() {
            if (!done) {
                theIframe = window.myiframe;
                theIframe.src = 'http://localhost/TestStuff/redirectIframe.jsp';
                done = true;
                stuff();
            } else {
                theIframe.setMe = true;
            }
        }

      </script>
</head>
      <body>
      <iframe src="" width="500" height="500" id="myiframe" name="myiframe">

      </iframe>
      </body>

И вот iframe:

<html>
  <head>
    <script type="text/javascript">
        var setMe = false;
        window.onload = setInterval('checker()', 1000);
        function checker() {
            alert('hi');
            if (setMe) {
                window.onload = null;
                top.location = 'http://www.google.com';
                alert('foundit');
            }  else alert('a');

        }

    </script>
    </head>
  <body></body>
</html>

Есть идеи?

1 Ответ

0 голосов
/ 02 марта 2011

В этом фрагменте кода:

theIframe.src = ...;
stuff();

вы звоните stuff() немедленно, вопреки тому, что вы описали, так что на самом деле вы не даете времени для загрузки страницы.Возможно, вы не понимаете, как работает setTimeout: он просто планирует одно выполнение по истечении указанного времени, автоматически не задерживает все вызовы функции.

Кроме того, вы можете использовать только clearTimeoutс предыдущим идентификатором, возвращаемым setTimeout, а не с кодом, как у вас сейчас.

Попробуйте что-то вроде этого:

window.onload = function() {
  loadFrame();
}

function loadFrame() {
  theIframe = ...;
  theIframe.src = ...;
  setTimeout(setSomething, 2000);
}

function setSomething() {
  theIframe.setMe = true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...