Javascript变量意外地在Internet Explorer中更改

时间:2011-06-15 12:05:47

标签: javascript internet-explorer

让我们从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中设置变量,那么发生了什么?

2 个答案:

答案 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(....);