如何知道如果窗口.Opener来自我的网页

How to know if window.opener comes from my webpage?

本文关键字:自我 我的 网页 Opener 何知道 如果 窗口      更新时间:2023-09-26

我有一个登录弹出修改它的父页面与窗口。代码是这样的:

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

这个问题是,如果有人有一个链接到我的网页,就像让我们说,从电子邮件的链接,这段代码将被执行,父母是电子邮件客户端。这将抛出一个javascript错误,因为我试图改变一个网页,不是我的。(在Chrome浏览器中,它说"不安全的JavaScript试图访问框架与URL")

我想知道是否有办法让我知道窗户是否坏了。

不是防弹的,但是您可以在主页上定义一些函数,然后测试它是否存在,以检查它是否您的页面吗?包装在一个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的对话框只是一个简单的方法来做到这一点)。

说了,为什么人们要直接链接到你的登录页面呢?假设它们可能存在,那么您想要测试是否存在正确的父窗口的点是在登录第一次显示时,而不是在用户输入详细信息并尝试提交之后。