我有一个PHP后端代码,它将使用社交网络进行身份验证,而前端代码将打开一个新窗口以加载身份验证的HTML文件。来自后端的最终回调窗口会将postMessage()中的对象发送到窗口打开器。此功能适用于Firefox以外的任何浏览器。你们有没有遇到过这个问题并设法解决了?
我已经尝试使用窗口侦听器,但也没有成功。
login: function (url, provider) {
return new Promise(function (resolve, reject) {
window.open(url + '/v1/user/login/' + provider, '_new', 'height=500,width=500');
});
},
getLoginResponse: function () {
return new Promise(function (resolve, reject) {
window.onmessage = function (e) {
resolve(e.data);
};
});
}
let data = '{{$data}}';
data = JSON.parse(data.replace(/"/g, '"'));
let opener = window.opener;
opener.postMessage(data, "*");
对于其他浏览器,resolve(e.data)
部分有效,但在Firefox上无效。
答案 0 :(得分:0)
WindowEventHandlers.onmessage
是实验性的,Firefox尚未正式支持(至少在v76中不支持),因此window.addEventListener("message", cb
)将不起作用。
https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onmessage