Sepertinya inti dari window.postMessage adalah untuk memungkinkan komunikasi yang aman antara windows / frame yang dihosting di domain yang berbeda, tetapi tampaknya tidak mengizinkannya di Chrome.
Berikut skenarionya:
- Sematkan <iframe> (dengan
src
di domain B * ) di halaman di domain A - <iframe> akhirnya menjadi tag <script>, yang akhirnya dieksekusi ...
- Saya memanggil window.postMessage ( some_data , page_on_A )
<iframe> paling pasti dalam konteks domain B, dan saya telah mengonfirmasi bahwa javascript yang disematkan di <iframe> itu dijalankan dengan benar dan memanggil postMessage
dengan nilai yang benar.
Saya mendapatkan pesan kesalahan ini di Chrome:
Tidak dapat mengirim pesan ke A . Penerima berawal B .
Berikut kode yang mendaftarkan pendengar peristiwa pesan di halaman di A:
window.addEventListener(
"message",
function (event) {
// Do something
},
false);
Saya juga mencoba menelepon window.postMessage(some_data, '*')
, tetapi yang dilakukannya hanyalah menekan kesalahan.
Apakah saya hanya melewatkan intinya di sini, apakah window.postMessage (...) tidak dimaksudkan untuk ini? Atau apakah saya melakukannya dengan sangat salah?
* Teks / html tipe pantomim, yang harus tetap ada.
sumber
Jawaban:
Berikut adalah contoh yang berfungsi di Chrome 5.0.375.125.
Halaman B (konten iframe):
<html> <head></head> <body> <script> top.postMessage('hello', 'A'); </script> </body> </html>
Perhatikan penggunaan
top.postMessage
atauparent.postMessage
tidakwindow.postMessage
di siniHalaman A:
<html> <head></head> <body> <iframe src="B"></iframe> <script> window.addEventListener( "message", function (e) { if(e.origin !== 'B'){ return; } alert(e.data); }, false); </script> </body> </html>
A dan B pasti seperti itu
http://domain.com
EDIT:
Dari pertanyaan lain , terlihat domain (A dan B di sini) harus memiliki
/
untukpostMessage
berfungsi dengan benar.sumber
postMessage
Anda harus memposting pesan dari frame ke orang tua, setelah dimuat.
skrip bingkai:
$(document).ready(function() { window.parent.postMessage("I'm loaded", "*"); });
Dan dengarkan sebagai orang tua:
function listenMessage(msg) { alert(msg); } if (window.addEventListener) { window.addEventListener("message", listenMessage, false); } else { window.attachEvent("onmessage", listenMessage); }
Gunakan tautan ini untuk info lebih lanjut: http://en.wikipedia.org/wiki/Web_Messaging
sumber
Mungkin Anda mencoba mengirim data Anda dari mydomain.com ke www.mydomain.com atau sebaliknya, CATATAN Anda melewatkan "www". http://mydomain.com dan http://www.mydomain.com adalah domain yang berbeda dengan javascript.
sumber
file:///
Apakah mungkin mendapatkan kesalahan domain saat menarik konten hanya dari sistem file lokal?