Определить свойство перекрестного происхождения - PullRequest
0 голосов
/ 04 июня 2018

TL; DR: возможно ли определить свойство перекрестного происхождения в родительском окне, чтобы оно действовало как флаг, доступный для дочернего окна?

У меня есть приложение JavaScript, которое может быть запущено в iframe иликонтекст просмотра верхнего уровня.Когда в iframe, приложение будет пытаться запросить функцию в родительском окне, используя window.postMessage.Эта функция может не существовать, поэтому я инкапсулировал window.postMessage и реализовал таймаут.Однако время ожидания должно быть довольно большим, и это отрицательно влияет на время загрузки, когда функция не существует.Можно ли определить свойство перекрестного происхождения в родительском окне, чтобы оно действовало как флаг для замены времени ожидания?

var parent = window.parent;
if (parent && parent.hasFeature) {
    window.postMessage(...);
    return;
}
...

Я не видел никакой поддержки, предоставляемой дескриптором доступа для Object.defineProperty , и похоже, что карта дескриптора свойства перекрестного источника является внутренней.

1 Ответ

0 голосов
/ 05 июня 2018

Мне не удалось найти способ определения свойства перекрестного происхождения в окне.Я не думаю, что это возможно.Однако я обнаружил три способа передачи данных между окнами с различным происхождением без использования веб-запроса или postMessage.

  1. Если родитель контролирует местоположение дочернего элемента, включите данные в качестве параметров запросачто ребенок будет проверять.Обратите внимание, что параметр также будет передан на сервер.См. Следующий пример.

    http://host/index.html?flag=1

  2. Если родитель контролирует местоположение ребенка, включите данные в качестве хеш-фрагмента, который будет проверять ребенок.Это более уместно, чем параметр запроса, поскольку хеш-фрагмент предназначен для использования в данных клиента.Однако это может быть невозможным, если клиент использует для навигации фрагмент хеша.

    http://host/index.html#flag=1

  3. Включить данные в качестве имени iframe ,Начальное имя iframe определяет имя встроенного контекста просмотра, к которому может обращаться дочерний элемент с помощью window.name .Тем не менее, это не предназначенное использование window.name и может сломаться или сломаться другими функциями.

    <iframe name="flag=1" src="http://host"></iframe>
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...