让我们从Javascript代码开始:
<script type="text/javascript">
var parentWindowLocation = '';
// closes the popop of the search when the parent is closed
window.onload = function() {
parentWindowLocation = window.opener.location;
if (window.opener != null) {
setInterval("checkParentExists()", 5000);
}
}
function checkParentExists() {
try {
alert(window.opener.location);
alert(parentWindowLocation);
if (window.opener == null || window.opener.closed) {
window.close();
} else {
if (parentWindowLocation != window.opener.location) { window.close(); }
}
} catch (e) { window.close(); }
}
</script>
上面的代码在弹出窗口中指定。当父关闭或父级的URL已更改时,弹出窗口应自行关闭。 这适用于Firefox和Chrome,但不适用于Internet Explorer。
我在 checkParentExists()中添加了两个警报,以查看Internet Explorer中发生的情况。 我注意到当父级更改为不同的URL(因此window.opener.location更改)时,变量parentWindowLocation也设置为父级的新URL!我只在window.onload中设置变量,那么发生了什么?
答案 0 :(得分:3)
“位置”对象是一个对象。当您将其转换为字符串时,您会从对象的属性中获取某些内容,但它不是字符串。因此,您的变量仍然可以引用“位置”对象,但值可以更改。
如果您将变量设置为window.opener.location.href
,则会获得一个字符串。你也可以试试这个:
parentWindowLocation = window.opener.location + '';
也会强制它被“捕获”为一个字符串。
答案 1 :(得分:0)
在父母中执行此操作:
var childWin;
window.onbeforeunload=function() {
try {
if (childWin && !childWin.closed()) childWin.close();
}
catch(e) {}
}
.
.
.
childWin=window.open(....);