Можно ли отправить postMessage в изолированную рамку iframe БЕЗ флага "allow-scripts"? - PullRequest
0 голосов
/ 06 декабря 2018

В основном у меня есть междоменный iframe и я не могу включить флаг allow-scripts, но в то же время мне нужно получить postMessage, который находится в теге <script> в документе iframe ИЛИ получить доступ к содержимому iframe contentDocument.

Я пробовал:

let iframeElement = document.getElementsByTagName('iframe')[0];
let iframeContent = iframeElement.contentDocument
console.log(iframeContent)

Но с флагом песочницы я получаю только null возврат.

То, что мне нужно сделать, это одиниз этих трех опций:

  • Добавить eventListener к тегу, который insde iframe contentDocument
  • Получить значение attr, которое также внутри iframe contentDocument
  • Способотправьте JSON со страницы происхождения и получите этот JSON на странице с iframe (postMessage)

Но все это без флага allow-scripts, это то, что я пытаюсь архивировать даже возможно

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Простой ответ: нет .

Теперь, поскольку ваш документ не удовлетворяет перекрестному источникуполитики, вы застряли, не имея возможности взаимодействовать с документом


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

Таким образом, больше не возникает проблема перекрестного происхождения (если вы добавите политику allow-same-origin в свой iframe), и вы сможете получить доступ к содержимому своего iframe из документа своего родителя или даже добавить прослушиватели событий,даже при том, что все еще никакие сценарии не могли быть запущены из этого контекста

0 голосов
/ 06 декабря 2018

Чтобы процитировать часть вашего вопроса,

Мне нужно получить сообщение postMessage, которое находится в теге <script> в документе iframe

Если вы имеете в виду, чтовам нужно поставить или вставить тег <script>, который содержит postMessaging, тогда я боюсь, что это невозможно, потому что политика того же происхождения предотвратит это.

Если, однако, вы пытаетесь получить доступ или прослушивание к postMessage трансляции из тега <script> внутриiframe перекрестного происхождения, то да, это именно то, для чего был разработан postMessage.При условии, что ваш прослушиватель событий сообщения размещен в источнике, как определено в аргументе targetOrigin postMessage.

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

  • доступ и разрешение на авторство содержимого iframe
  • было поручено прослушивание транслируемых сообщений путем размещения наtargetOrigin определено ( рекомендуется ) или находится на любом источнике, если targetOrigin имеет подстановочный знак '*' ( не рекомендуется )

https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage#Security_concerns

...