页面上有一个按钮,用于打开弹出窗口。
<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来监听变量的变化。我究竟做错了什么?我想很多。
答案 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