代码之家  ›  专栏  ›  技术社区  ›  Zach Langley

如何在更改父窗口时阻止IE在iframe中显示URL

  •  2
  • Zach Langley  · 技术社区  · 15 年前

    在iframe中使用javascript:parent.location.href更改父窗口时,即短暂更改iframe内容以列出父窗口更改的URL。Firefox、Chrome和Opera只需更改父窗口。

    有没有一种方法可以让IE跳过在iframe中显示URL并只更改父级?

    [编辑]

    这是复制它的示例代码。

    iFrAME-Page:

    <iframe id="finder" name="finder" src="content.html" scrolling="no" height="620" width="620" style="border:1px #c0c0c0 solid;"></iframe>
    

    内容页:

    <a href='javascript:parent.location.href="http://www.google.com"'>test link</a>
    
    2 回复  |  直到 14 年前
        1
  •  7
  •   Rex M    14 年前

    发生这种情况是因为您正在计算表达式,而不是调用方法。

    parent.location.href = "http://www.google.com";
    

    如果我们将其移动到显式函数,我们将不再看到行为:

    <a href="javascript:void(parent.location.href = 'http://www.google.com')">test link</a>
    

    但是,当然,没有理由在这个特定的案例中使用JS:

    <a href="http://www.google.com/" target="_parent">test link</a>
    

    如果有的话,我们还是应该体面地降级:

    <a href="http://www.google.com/" target="_parent">test link</a>
    
    <script type="text/javascript">
        var links = document.getElementsByTagName('a');
        for(var i=0;i<links.length;i++) {
            if(links[i].target == '_parent') {
                links[i].onclick = handleParentClick;
            }
        }
    
        function handleParentClick(e) {
            var sender = e ? (e.target || e) : window.event.srcElement;
            parent.location.href = sender.href;
            return false;
        }
    </script>
    
        2
  •  4
  •   David    15 年前

    如果将javascript更改为以下值,则可以将其保留为内联:

    <a href='javascript:void(parent.location.href="http://www.google.com")'>test link</a>
    

    通常,“set”表达式还返回表达式的右侧。IE获取表达式的返回值并显示它。通过在其周围放置“void()”,可以移除返回值,这样IE就不会显示它。