指定された関数を使用してメッセージを投稿しましたが、「DataCloneError:オブジェクトのクローンを作成できませんでした」というエラーが発生します。行 "target ['postMessage'](message、target_url.replace(/([^:] +:// [^ /] +)。* /、 '$ 1'));" FireFox-34では、同じコードがChromeおよび古いバージョンのFireFoxで正常に機能しています。
var storage = function() {
return {
postMessage : function(message, target_url, target) {
if (!target_url) {
return;
}
var target = target || parent; // default to parent
if (target['postMessage']) {
// the browser supports window.postMessage, so call it with a targetOrigin
// set appropriately, based on the target_url parameter.
target['postMessage'](message, target_url.replace( /([^:]+:\/\/[^\/]+).*/, '$1'));
}
}
}
}();
postMessage
Firefoxでは 構造化クローンアルゴリズム を使用してメッセージを送信します。そのため、送信する前に調整する必要がある特定の事項があります。
あなたの例では、どのメッセージが含まれているのかは明らかではありませんが、構造化クローンを回避する1つのハックの方法は、少し強制することです。 postMessage
経由でURLを送信すると、エラーがスローされます。
someWindow.postMessage(window.location, '*');
// ERROR
しかし、これを回避するためにこれを行うことができます:
var windowLocation = '' + window.location;
someWindow.postMessage(windowLocation, '*');
// WORKS
これを処理するためのより良い方法がありますが、あなたが提供したものについては、これは少なくとも一貫した動作を可能にするはずです。