Location.hash仅在Safari 7中为空

时间:2014-08-15 15:21:21

标签: javascript safari oauth-2.0 postmessage constantcontact

我正在尝试通过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.hashwindow.location.hashwindow.parent.location.hash都是空的。

身份验证流程非常标准:

  1. 用户点击身份验证按钮
  2. 使用常量联系人进行身份验证的弹出窗口
  3. 允许申请
  4. 列表项
  5. 返回应用网站以捕获令牌
  6. 这是我们用来获取网址哈希信息的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获取信息?它适用于所有其他浏览器,所以我不想重写这部分应用程序。

0 个答案:

没有答案