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