Ответ на Неверный способ обнаружения iframe - это перекрестный домен" описывает метод проверки if iframe на страницах страницы на одну и ту же доменную или междоменную страницу, работая с интерпретаторами различных междоменных политик браузеров и избегая сообщений об ошибках, которые могут прерывать пользователя или останавливать javascript.
Я хочу сделать эквивалент этого, но с дочерней страницы внутри проверки iframe, находится ли он внутри междоменного iframe или нет.
Это возможно для доступа (того же домена) информации о родительском с помощью parent
global, например. parent.document.location
, но существует ли надежный способ сделать этот кросс-браузер без сбоев в ошибках, когда он обнаруживает, что родительский объект является междоменным?
Для удобного тестирования здесь jsbin внутри jsfiddle, который попадает в ошибку при попытке проверить, доступен ли parent.location.host
. Есть ли надежный способ получить что-то полезное, например false
, говорящее нам, что это кросс-доменный родитель, а не ошибка?
Есть ли вариант try...catch
, который будет надежным кросс-браузером? Или, может быть, какой-то умный трюк с использованием возвращаемого значения от parent.postMessage()
? (хотя родительская страница не может быть отредактирована)
Случай использования: представляйте встраиваемый контент, который должен быть встроен на страницы на своем собственном сайте, и третьими лицами. Если страница находится в одном домене iframe, мы скрываем брендинг и ссылки на исходный сайт, потому что пользователь уже здесь. Если они обращаются к странице с стороннего iframe или загружают страницу напрямую, мы показываем брендинг и кредиты, чтобы они могли видеть источник контента.
Чтобы уточнить, я знаю о политике одного домена, и мне все равно, что такое домен перекрестного браузера, я просто хочу написать простое, но надежное условие if
вроде if( crossDomainParent() ){ /* do something */}