如何知道window.opener是否来自我的网页?

时间:2011-08-17 22:28:18

标签: javascript

我有一个登录弹出窗口,用window.opener.location.href = XXX修改其父页面。代码就是这样的。

  if (window.opener) {
      window.opener.location.href = window.location.href;
      self.close();
  } 

问题在于,如果某人有我的网页链接,比如说,来自电子邮件的链接,这段代码将被执行,而父级则是电子邮件客户端。这将导致javascript错误,因为我正在尝试更改不属于我的网页。(在Chrome中,它说“不安全的JavaScript尝试使用URL访问框架”)

我想知道是否有办法可以找出window.opener是否来自我的网页。

1 个答案:

答案 0 :(得分:2)

不是防弹,但是您可以在主页上定义一些功能,然后检查它是否存在,以检查它是您的页面?包含在try / catch中以避免在页面不属于您时出现其他错误?

// on parent, make this function name something unlikely to appear
// on other pages
function checkParentIdentity() { return "some ID string"; }


// on popup
try {
  if (window.opener
      && window.opener.checkParentIdentity
      && window.opener.checkParentIdentify() === "some ID string") {
     window.opener.location.href = window.location.href;
     self.close();
  }
} catch(e) {
  // error message here
}

话虽如此,我并不是说它是一个好的想法,只是一个可能适合你现有代码的想法。如果是我,我会将location.href更新移动到父级的函数中,然后让子窗口调用该函数来告诉父级更新自己 - 这可以通过对代码的最小更改来完成我已经发布。但是,如果是我,我可能根本不会使用弹出窗口,因为我可以在主页面上执行动态对话框覆盖(jQuery的对话框只是一种简单的方法)。

说过 ,为什么人们会直接链接到您的登录页面?假设它们可能,您想要测试右父窗口是否存在的点是登录首次显示,而不是在用户输入其详细信息并尝试提交之后。