Могу ли я использовать postMessage для iframe, чей html передается через атрибут - srcdoc? - PullRequest
0 голосов
/ 25 сентября 2019

Я не могу вызвать postMessage в случае, если я передаю html в атрибуте srcdoc

без sandbox = "allow-scripts", это выдает следующую ошибку

Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('https://example.com') does not match the recipient window's origin ('https://example.com:444').


с sandbox = "allow-scripts", выдает следующую ошибку

Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('https://example.com') does not match the recipient window's origin ('null').


Я хотел бы вызвать postMessage без песочницыатрибут, я могу?

, если нет, есть ли другой способ?

1 Ответ

1 голос
/ 26 сентября 2019

Конечно, вы можете.

Проблема, на которую жалуются ваши сообщения об ошибках, заключается в том, что вы установили для параметра target-origin Window.postMessage( message, target-origin, transferable ) недопустимое значение.
Вы не показывали свой код, но если бы мне пришлось сделать предположение, я бы сказал, что вы не установили его вообще, и, таким образом, он по умолчанию установил источник вашей текущей страницы.

Поскольку ваш целевой кадр не имеет атрибута src, но srcdoc, его местоположение будет about:srcdoc, а его источник будет null, поэтому любое другое значение, кроме "*" дляtarget-origin postMessage сделает запрос неудачным.
Вы должны установить для него "*".

frame.onload = (e) => {
  frame.contentWindow.postMessage( 'hello frame', '*' );
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...