我使用 postMessage 在主机和我的域的 iframe 之间进行通信。
这是 hostdomain.org 上的代码:
function rec_tyd(json_var)
{
//if i decode and alert json_var there i get the content.
var win = document.getElementById("tyd_frame").contentWindow;
win.postMessage(json_var, "http://multipress.fr/tyd//module/pro_mod.php");
}
<iframe src="http://example.org/myiframe.php" width="500" height="200"
name="tyd_frame" id="tyd_frame" style="border:1px solid black;"</iframe>
json_var 是一个 JSON 对象。
我的域 example.org/myiframe.php 上的代码是:
if (!window.addEventListener) // IE
{window.addEventListener = function (type, listener, capt) {
attachEvent("on"+type, function(){listener(event)});}
}
addEventListener("message", function(e) {
var final = JSON.parse(e.data);
alert(final.id_product);
alert(final.id_company);
}, false);
基本上,一切正常,除了:
- 在第一次加载时,我在 iframe 中没有得到任何东西
- 当我重新加载一次时,我得到了价值
- 如果我刷新主机页面,我将一无所获。
Chrome 和 FireFox 中的相同:刷新不起作用,但如果进入地址栏并按 Enter 键,它会起作用。除了第一次。
我检查了我的 JSON 对象,并在 postmessage 之前得到它。它真的在 iframe 中,我什么也得不到。
所以我的问题是:我怎样才能测试我得到了什么?我在代码中犯了错误吗?
目前我实际上在同一个域上工作,但它将在不同的域上进行生产。