Disebabkan sekatan dasar asal yang sama, Javascript mempunyai masalah komunikasi merentas domain yang biasa termasuk komunikasi antara iframe dan induk, dsb.
Beberapa penyelesaian biasa:
(1) document.domain iframe;
(2) Buat skrip secara dinamik;
(3) iframe location.hash;
Saya tidak akan menerangkan butiran tentang kaedah ini di sini. Apa yang direkodkan ialah tetingkap HTML5.postMessage.
postMessage serasi dengan IE8, Firefox, Opera, Safari dan Chrome.
Dua pelayan asing diperlukan untuk ujian Sudah tentu, pelayan tempatan dan dalam talian juga boleh digunakan sebagai dua pelayan asing.
Jika anda menggunakan phonegap untuk membangunkan, anda boleh memasang fail permintaan pada klien, dan kemudian meminta pemprosesan data pelayan secara dinamik untuk mendapatkan dan memaparkan data. Dengan cara ini, sebarang bahasa dan kaedah pembangunan web boleh digunakan untuk membangunkan bahagian belakang yang diperlukan oleh Phonegap App.
1. Penggunaan postMessage
postMessage ialah API baharu yang diperkenalkan oleh HTML5 untuk menyelesaikan masalah merentas domain js, membenarkan berbilang iframe/tetingkap komunikasi merentas domain.
Andaikan strukturnya adalah seperti berikut:
Salin kandungan ke papan keratan
Ia sangat mudah, saya percaya anda akan memahaminya sepintas lalu. e.data mengandungi data yang dihantar, dan e.origin merujuk kepada domain sumber.
Kemudian iframe.html juga menghantar data respons ke test.html dan test.html menerima data tersebut. Jika kodnya serupa, saya tidak akan menyiarkan kod itu.
2. Permintaan merentas domain Ajax
Berdasarkan komunikasi merentas domain di atas, letakkan kod Ajax dalam fungsi pemprosesan onmessage dalam iframe. html, Hantar permintaan ke test.html menggunakan data yang diluluskan oleh postMessage sebagai parameter, dan kemudian hantar data yang dikembalikan ke test.html menggunakan postMessage. Dengan cara ini, permintaan Ajax merentas domain dilaksanakan. Ia sebenarnya satu perkara yang sangat mudah.
Siarkan kod sampel, tetapi ia tiada kaitan dengan kod di atas.
Dann geben Sie eine unansehnliche Demo.
Wenn Sie an der Code-Anfrage interessiert sind, verwenden Sie bitte die Entwicklertools, um sie auszuprobieren. „zebo man“ wird aus der Datenbank gelesen und „my msg“ ist der Parameter der von sendAndReceive gesendeten Ajax-Anfrage .html an test.php, zurück an sendAndReceive.html über test.php und iframeforAjax.html.
3. Tipps
Sie müssen das ContentWindow des Iframes abrufen, um postMessage aufzurufen.
postMessage muss nach dem Laden des Iframes aufgerufen werden, damit es normal ausgeführt werden kann. (Das hat lange gedauert)