代码之家  ›  专栏  ›  技术社区  ›  Sietse

IE缓存动态添加的iframe。为什么,我该如何预防?

  •  3
  • Sietse  · 技术社区  · 16 年前

    我有以下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.html ,正如预期的那样。然后我刷新,点击 酒吧 . 而不是获取 bar.html ,我看到了 HTML . 奇怪的是,当我点击 测试 , the alert() 告诉我 src iframe的属性正确设置为 巴尔 . 火狐没有这样的问题。

    为什么会发生这种情况,我该如何预防?

    编辑: 我忘记提到的是,我不能将iframe放入并更改src属性。在实际情况下,有时我需要 <img> 而不是 <iframe> .

    3 回复  |  直到 13 年前
        1
  •  2
  •   Ria    16 年前

    您是否尝试更改生成的iframe中的URL? 例如。

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

    更好的是,将其与geowa4的appendChild()建议结合起来。

        2
  •  3
  •   geowa4    16 年前

    使用此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();它还没有失败。

        3
  •  2
  •   Diodeus - James MacFarlane    16 年前

    设置iframe的src,而不是更改其容器的innerhtml:

    HTML:

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

    脚本:

    document.getElementById('myFrame').src='foo.html'