Мне нужно проверить ситуацию, когда у меня есть родительское окно, на котором размещается iframe, который будет пустым. Мне нужно использовать iframe в качестве прокси-сервера между родительским и междоменным ресурсом. Я создал простой jsfiddle, который должен попытаться отправить сообщение от родителя к дочернему iframe.html5 установка обработчика onmessage для iframe в родительском скрипте
Что я пытаюсь сделать в javascript для родителя, есть обработчик для дочернего iframe, но для жизни меня я не могу понять синтаксис, чтобы заставить его работать правильно. Я попытался с помощью помощника addEvent, чтобы получить событие должным образом добавляемые (для IE и всех остальных) из примеров, которые я видел в современной Javascript Разработка и дизайн:
addEvent: function(obj, type, fn) {
if (obj && obj.addEventListener) {
obj.addEventListener(type, fn, false);
} else if (obj && obj.attachEvent) {
obj.attachEvent('on' + type, fn);
}
}
Путь я сейчас пытаюсь настроить в обработчик OnMessage выглядит следующим образом:
document.getElementById("frame1").onmessage = function(e) {
alert(e.data);
};
Я также подумал, что, может быть, мне нужно, чтобы получать доступ к contentWindow элемента, но OnMessage, кажется, не существует.
Есть ли свойство или способ доступа к iframe, чтобы он выглядел как окно и имел бы onmessage, который можно было бы обработать?
Update
я могу увидеть значение OnMessage установить на функцию и даже оповещения (...) из значения, чтобы увидеть, что это действительно моя функция предназначена, но я не вижу, что называется когда postMessage вызывается на дочернем iframe.
Попытка установить свойство onmessage с помощью document.getElementById (...). ContentWindow для iframe никогда не возвращается из моей js-отладки. Я не вижу той же проблемы, когда пытаюсь установить ее на document.getElementById (...). – ShelbyZ
@ShelbyZ Я включил в свой ответ две демонстрации, которые показывают предупреждение. Я также исправил опечатку: 'vat' должен был быть' var'. –
Таким образом, кажется невозможным только с одним родительским окном и 1 iframe не в том же домене, чтобы фактически обрабатывать onmessage ребенка, потому что это будет нарушать одну и ту же политику происхождения. На этом этапе для iframe потребуется включить другой фрейм, домен которого такой же, как и родитель верхнего уровня для работы. – ShelbyZ