IE кеширует динамически добавляемый iframe. Почему и как мне это предотвратить? - PullRequest
3 голосов
/ 22 января 2009

У меня есть следующий HTML / JS:

<html>
  <body>
    <script>
      function foo(){
        var html = "<iframe src=\"foo.html\" />";
        document.getElementById('content').innerHTML=html;
      }

      function bar(){
        var html = "<iframe src=\"bar.html\" />";
        document.getElementById('content').innerHTML=html;
      }

      function show(){
        alert(document.getElementById('content').innerHTML);
      }
    </script>
    <button onclick="foo()">foo</button><br />
    <button onclick="bar()">bar</button><br />
    <button onclick="show()">test</button><br />    

    <div id="content"></div>
  </body>
</html>

Этот тип работает, как и ожидалось, даже в IE. Пока я не нажму F5. Когда я впервые нажимаю foo , я получаю iframe с содержимым foo.html, как и ожидалось. Затем я обновляюсь и нажимаю bar . Вместо того, чтобы получать содержимое bar.html, я вижу содержимое foo.html. Странно, когда я нажимаю test , alert() сообщает мне, что атрибут src для iframe правильно установлен на bar.html. У Firefox такой проблемы нет.

Почему это происходит и как мне это предотвратить?

edit: что я забыл упомянуть, так это то, что я не могу вставить iframe и изменить атрибут src. В реальной ситуации иногда мне нужно <img>, а не <iframe>.

Ответы [ 3 ]

3 голосов
/ 22 января 2009

Используйте этот DOM

<div id="content" style='display:none;'>

  <iframe id='contentFrame' src='' />

</div>

А это как твой сценарий

function foo() {
  var contentDiv = document.getElementById('content');
  var contentFrame = document.getElementById('contentFrame');

  contentFrame.src = 'foo.html';
  contentDiv.style.display='block';
}

Я заметил странное поведение с IE и использованием innerHTML. Я бы использовал его только для очистки содержимого (innerHTML = ""). Если я хочу что-то добавить, я использую HTMLElement.appendChild (); это еще не провалилось для меня.

2 голосов
/ 22 января 2009

Вы пытались изменить URL в созданном вами iframe? Например.

var randomNum = Math.random();
var html = "<iframe src=\"bar.html?rand="+randomNum+"\" />";

Еще лучше, объедините это с предложением geowa4 appendChild ().

2 голосов
/ 22 января 2009

Установите SRC для Iframe вместо изменения innerHTML его контейнера:

HTML:

<iframe id="myFrame" src="about:blank" />

сценарий:

document.getElementById('myFrame').src='foo.html'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...