dojo 1.8でhtml5ポストメッセージングを実行しようとしていますが、それをよりよく説明するためにjsfiddleを作成しました。注意すべき点の1つは、ボタンがiframe内に読み込まれていることです。したがって、基本的にクリックがiframe内で発生した場合、親ノードはメッセージを受信して処理する必要があります。任意のポインタをいただければ幸いです。
質問する
810 次
1 に答える
1
基本的に、message
iframeウィンドウでリッスンする必要がありますiframe.contentWindow
。また、dojo
iframeには何もありませんのでご注意ください。
jsFiddleを作成して、その動作を示しました:http://jsfiddle.net/phusick/H7Zh8/しかし、すべてを1つのファイルに、つまり親ウィンドウのコンテキストに含めるのは非常に面倒です。window
参照がどこを指しているかを適切に説明しておらず、実際の使用法をシミュレートしていません。親ウィンドウ用とiframe用の2セットのスクリプトがあるローカルホストで試してみることをお勧めします。
require([
"dojo/dom",
"dojo/on",
"dojo/date/locale",
"dojo/domReady!"
], function(
dom,
on,
locale
) {
var buttonNode = dom.byId("postMessageButton");
var iframeNode = dom.byId("iframe");
var iframe = iframeNode.contentWindow;
var iframeButtonNode = iframe.document.getElementById("postMessageButton");
on(buttonNode, "click", function() {
iframe.postMessage("hello from parent", "*");
});
on(iframe, "message", function(event) {
var msgNode = iframe.document.getElementById("msg");
msgNode.innerHTML += formatMessage(event);
event.source.postMessage("echo from iframe", "*");
});
on(iframeButtonNode, "click", function() {
iframe.parent.postMessage("hello from iframe", "*");
})
on(window, "message", function(event) {
dom.byId("msg").innerHTML += formatMessage(event);
});
function formatMessage(event) {
var time = locale.format(new Date(event.timeStamp),{
selector: "time",
formatLength: "medium"
});
return time + ": " + event.data + "<br>";
}
});
于 2012-09-12T11:47:47.093 に答える