Location.hash пусто только в Safari 7

Я пытаюсь аутентифицироваться с постоянным контактом через OAuth2 во всплывающем окне. я использую $.postMessage отправлять данные между окнами, и по большей части это работает прекрасно.

Моя проблема с Safari. Обычный запрос имеет URL, который выглядит следующим образом:

https://example.com/oauth-v2/#access_token=xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx&token_type=Bearer&expires_in=xxxxxxxxx

Но при использовании Safari для выполнения запроса весь хэш обрезается по URL и location.hash, window.location.hash, window.parent.location.hash все пусто.

Поток аутентификации довольно стандартный:

  1. Пользователь нажимает кнопку авторизации
  2. Всплывающее окно для авторизации с постоянным контактом
  3. Разрешить приложение
  4. Элемент списка
  5. Вернуться на сайт приложения для захвата токена

Вот JavaScript, который мы используем, чтобы получить информацию о хэше URL

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? Должен ли я делать что-то еще, чтобы получить информацию от Постоянного контакта? Он работает в любом другом браузере, поэтому я не хотел бы переписывать эту часть приложения.

0 ответов

Другие вопросы по тегам