我正在尝试通过OAuth2在弹出窗口中使用Constant Contact进行身份验证。我使用$.postMessage
在窗口之间发送数据,并且在大多数情况下,它工作得很漂亮。
我的问题在于Safari。普通请求的URL如下所示:
https://example.com/oauth-v2/#access_token=xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx&token_type=Bearer&expires_in=xxxxxxxxx
但是在使用Safari发出请求时,整个哈希都会从网址中删除,而location.hash
,window.location.hash
,window.parent.location.hash
都是空的。
身份验证流程非常标准:
这是我们用来获取网址哈希信息的javascript
jQuery(document).ready(function ($) {
$.extend({
getQueryParameters: function (str) {
return (str || document.location.search || document.location.hash)
.replace(/(^\?)|(^\#)/, '')
.split("&")
.map(function (n) { return n = n.split("="), this[n[0]] = n[1], this }.bind({}))[0];
}
});
$.receiveMessage(function (event) {
$.postMessage($.getQueryParameters(), event.origin, event.source);
setTimeout(function () {
window.close()
}, 5000);
});
});
缺少的哈希值是Safari中的已知错误吗?我是否应该采取其他措施从Constant Contact获取信息?它适用于所有其他浏览器,所以我不想重写这部分应用程序。