2015-01-21 5 views
2

Я использую $ postMessage для связи кросс-браузера с родительским окном. Все работает отлично во всех браузерах, кроме Safari. Проблема заключается в использовании document.location.hash Хеш возвращается в Safari как пустой. Так или иначе, это происходит в Сафари.document.location.hash не работает в Safari

function postMessage(msg){ 
    var parent_url = decodeURIComponent(document.location.hash.replace(/^#/, '')); 
    $.postMessage({ method:'resize', message:msg}, parent_url, parent); 
} 

Update:

Так родительское окно создает Iframe, который присоединяет «#URL к концу этого. Я использую document.location.hash.replace (/^# /, ''), чтобы захватить этот url для использования в качестве url для postMessage. При тестировании всего этого в Safari V8.0.2 Safari удалял # и ничего после #. Итак, мой родительский знак вернулся.

Решение этого должно заключаться в использовании параметра param = url в конце URL-адреса вместо #. Я не уверен, почему Safari будет удалять # или если это хорошо документированная проблема. Я искал в Интернете, чтобы узнать больше информации.

+0

* Не работает * в каком смысле? Ошибки метания? – Sampson

+3

'window.location.hash', не использовать' document' – epascarello

+0

document.location.hash возвращается в качестве сафари в качестве сафари –

ответ

2

Если location.hash недоступно, почему бы не использовать location.href?

href = location.href; 
hashIdx = href.lastIndexOf('#'); 
hash = href.slice(hashIdx); 

// or in one line 
hash = location.href.slice(location.href.lastIndexOf('#')) 

Обратите внимание, что hash не поддерживается в довольно многих браузерах: https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.hash

+0

Ссылка MDN на другой API см. Https://developer.mozilla.org/en-US/docs/Web/API/Location Основная проблема, скорее всего, будет пытаться использовать ' documetn' вместо 'window' – charlietfl

+0

# удаляется из URL-адреса в Safari. –

+0

Только что посетил http://stackoverflow.com/questions/28077188/document-location-hash-not-working-in-safari?answertab=votes#tab-top в Safari, и мой код вернул '' # tab-top " - что, как говорится, моя версия Safari также имеет объект 'Location' с' hash'. Какую версию Safari вы используете? – Wex