在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>
答案 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不会显示它。