Как разрешить доступ к содержимому дочернего окна с помощью CORS? [Дубликат]

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

Независимо от вашего языка: функция определяется один раз, но имеет тенденцию использоваться в любом количестве мест. Наличие постоянного типа возврата (не говоря уже о документальных предварительных и постконфиденциальных условиях) означает, что вам нужно больше усилий, чтобы определить функцию, но вы значительно упростите использование этой функции. Угадайте, могут ли одноразовые расходы перевешивать повторяющиеся сбережения ...?

34
задан Kunal Vashist 22 February 2012 в 13:01
поделиться

2 ответа

Если у вас нет контроля над фрейм-сайтом, вы не можете обойти междоменную политику.

Если у вас есть контроль над обоими сайтами, вы можете использовать postMessage для передачи данных в разных доменах. Очень простой пример:

// framed.htm:
window.onmessage = function(event) {
    event.source.postMessage(document.body.innerHTML, event.origin);
};

// Main page:
window.onmessage = function(event) {
    alert(event.data);
};

// Trigger:
// <iframe id="myframe" src="framed.htm"></iframe>
document.getElementById('myframe').contentWindow.postMessage('','*');
46
ответ дан Rob W 15 August 2018 в 14:28
поделиться

В событии Internet Explorer 8, переданном как параметр, может быть null, поэтому вам нужно получить доступ к событию другим способом:

В файле frame.html:

window.onmessage = function(event) {
   var evt = evt || window.event;
   evt.source.postMessage('Message from iFrame', evt.origin);
};

На main.html:

window.onmessage = function(event) {
   var evt = evt || window.event;
   alert(evt.data);
};

Событие запускается так же, как и Rob W:

document.getElementById('frameId').contentWindow.postMessage('message','*');
3
ответ дан Przemek Marcinkiewicz 15 August 2018 в 14:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: