gpt4 book ai didi

javascript - IE8+, window.open(url/#/frag ,'_parent' ) 与 iframe 中的parent.location.href=url/#/frag

转载 作者:行者123 更新时间:2023-11-28 01:06:45 24 4
gpt4 key购买 nike

我有一个加载 iframe 的网站。父窗口中的代码注册一个 onbeforeunload 监听器。

当前 iframe 包含一个带有触发点击处理程序的按钮:

window.open(/#/frag,'_parent')

在我测试过的所有浏览器中(除了 IE8/IE9),这都具有加载父片段而不触发 onbeforeunload 事件的所需行为。但是,如果我更改 iframe 的点击处理程序以触发:

parent.location.href='/#/frag'

它在 IE 8/9 中也能正常工作。

谁能解释一下这种行为吗?

我在下面提供了一个简单的示例:

index.html

<!DOCTYPE html>
<html>
<head>
<script>
function registerUnloadListener(){
window.onbeforeunload = function (e) {
return "onbeforeunload";
};
}
</script>
</head>

<body onload="registerUnloadListener()">
<iframe width="100%" src="iframe.html"></iframe><br/>
</body>
</html>

iframe.html

<!DOCTYPE html>
<html>
<head>
<script>
function setParentLocation(frag){
parent.location.href = frag;
}
function openWindowInParent(frag){
window.open(frag,'_parent');
}
</script>
</head>
<body>
onbeforeunload triggered (as expected) -->
<a href="javascript:void(0);" onclick="setParentLocation('/')">
parent.location.href = '/'
</a><br/>

onbeforeunload NOT triggered (as expected) -->
<a href="javascript:void(0);" onclick="setParentLocation('/#/frag')">
parent.location.href = '/#/frag'
</a><br/>

onbeforeunload triggered for IE8/IE9 only (unexpected) -->
<a href="javascript:void(0);" onclick="openWindowInParent('/#/frag')">
window.open("/#/frag",'_parent')
</a>
</body>
</html>

预先感谢您的任何反馈。

最佳答案

尝试将 return false; 添加到 anchor 的 onclick 事件中。这是一个已知问题,在 IE 中使用 href="javascript:void(0); 锚定会触发 onbeforeunload,但添加 return false;点击处理程序解决了这个问题。

<a href="javascript:void(0);" onclick="openWindowInParent('/#/frag'); return false;">
window.open("/#/frag",'_parent')
</a>

关于javascript - IE8+, window.open(url/#/frag ,'_parent' ) 与 iframe 中的parent.location.href=url/#/frag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24972684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com