无法将值从子窗口传递到父窗口

时间:2019-03-08 22:38:48

标签: javascript jquery

页面上有一个按钮,用于打开弹出窗口。

<div class="container-content">
    <div id="VKauth">In order to leave comments, you have to authorize via VK and grant all permissions.</div><br />
    <div>
        <a href="/authvk"
            onclick="return !window.open(this.href, 'Redirecting to VK...', 'width=500, height=500')"
            target="_blank">
            <object data="/images/VKAuth.png" type="image/png" class="authvk">
                Authorize via VK
            </object>
        </a>
    </div>
</div>

VK(社交媒体网站)中的授权表单会弹出一个窗口。如果用户取消授权,VK会将他们重定向到我网站上的PHP脚本(在同一弹出窗口内)。

该脚本如下(我删除了不相关的逻辑):

echo "<script>parent.response = 'user_denied';</script>";
echo "<script>window.close();</script>";

我想在这一点上,在关闭窗口之前,它必须将值response的变量'user_denied'传递给父窗口。

在父页面(具有按钮的页面)上,我有如下所示的javascript(使用了一些jquery):

response = {
  aInternal: 10,
  aListener: function(val) {},
  set a(val) {
    this.aInternal = val;
    this.aListener(val);
  },
  get a() {
    return this.aInternal;
  },
  registerListener: function(listener) {
    this.aListener = listener;
  }
}

response.registerListener(function(val) {
  if (response.a == 'user_denied') {
      console.log('response is', response.a);
      $("#VKauth").append('<div style="color: red;">You denied authorization! Comments are blocked!</div>');
  }
});

但是,在弹出页面上的PHP脚本完成并且大概将值为response的变量'user_denied'报告给父窗口之后,什么都没有发生。控制台中甚至没有错误。

我用this answer来监听变量的变化。我究竟做错了什么?我想很多。

1 个答案:

答案 0 :(得分:0)

您可以将数据传递到父窗口,例如window.opener.response = 'user_denied';用于弹出窗口,window.parent.response = 'user_denied';用于iframe。现在有一个window.postMessage(),可用于在窗口之间更安全地共享数据。 https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage