2012-06-08 2 views
0

Я пытаюсь работать с функцией postMessage HTML?HTML 5 postMessage (тот же домен)

У меня есть несколько сайтов, дающих пример, но по какой-то причине борется.

Код для 2-х страниц приведен ниже, любая помощь будет оценена.

Спасибо и наилучшими пожеланиями, Райан

test.php

<iframe src="postmessage-target.html" id="iframe"></iframe> 
<form id="form"> 
    <input type="text" id="msg" value="Message to send"/> 
    <input type="submit"/> 
</form> 
<script> 
window.onload = function(){ 
     var win = document.getElementById("iframe").contentWindow; 
     document.getElementById("form").onsubmit = function(e){ 
       win.postMessage(document.getElementById("msg").value); 
       e.preventDefault(); 
     }; 
}; 
</script> 

PostMessage-target.html

<div id="test">Send me a message!</div> 
<script> 
document.addEventListener("message", function(e){ 
     document.getElementById("test").textContent = 
       e.domain + " said: " + e.data; 
}, false); 
</script> 

Еще раз спасибо заранее.

Райан

UPDATE

Правильно ли это в соответствии с уведомлением пользователя?

test.html

<iframe src="postmessage-target.html" id="iframe"></iframe> 
<form id="form"> 
    <input type="text" id="msg" value="Message to send"/> 
    <input type="submit"/> 
</form> 
<script> 
window.onload = function(){ 
     var win = document.getElementById("iframe").contentWindow; 
     document.getElementById("form").onsubmit = function(e){ 
       win.postMessage(document.getElementById("msg").value, "*"); 
       e.preventDefault(); 
     }; 
}; 
</script> 

PostMessage-target.html

<div id="test">Send me a message!</div> 
<script> 
document.addEventListener("message", function(e){ 
document.getElementById("test").innerHTML = e.origin + " said: " + e.data; 
}, false); 
</script> 

ответ

2

норма определяет, что вы должны предоставить targetOrigin к функции PostMessage:

win.postMessage(document.getElementById("msg").value, "*"); 

Я не думаю, что есть e.domain. Попробуйте e.origin у слушателя:

document.getElementById("test").innerHTML = e.origin + " said: " + e.data; 

(я также заменил нестандартный TextContent по innerHTML)

+0

Привет @dystroy, см. Обновление, я сделал это правильно? Спасибо, – Smudger

+0

Я все еще вижу те же ошибки. Вы уверены, что обновились? Кстати, лучше всего попробовать. –

0

Чтобы получить эту работу, я закончил тем, что изменить document.addEventListener к window.addEventListener- Я думаю, вы добавляете код приема в передающий документ вместо iframe, когда вы это делаете.

 Смежные вопросы

  • Нет связанных вопросов^_^