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

时间:2009-03-11 18:16:38

标签: javascript internet-explorer iframe

在IFrame中使用javascript:parent.location.href更改父窗口时,IE会短暂更改IFrame内容以列出父级正在更改的URL。 Firefox,chrome和opera只是更改父窗口。

有没有办法让IE跳过显示IFrame中的url并只更改父级?

[编辑]

这是复制它的示例代码。

iframe页面:

<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 个答案:

答案 0 :(得分:7)

这是因为您正在评估表达式,而不是调用方法。

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>

答案 1 :(得分:4)

如果您将其更改为此内容,则可以保留内联版本:

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

通常,“set”表达式也会返回表达式的右侧。 IE获取表达式的返回值并显示它。通过在其周围放置“void()”,您可以删除返回值,因此IE不会显示它。