今日、Firefox を 13.0 にアップグレードしました。しかし、私のJavaScriptコードに何か問題があります。
Web ページ A (www.xx.com) と Web ページ B (webim.xx.com) があります。iframeタグを使用して B を A に埋め込みます。
ウェブページ A
最初にドメインを「xx.com」に設定します
<script>document.domain = 'xx.com';</script>
次に、iframe を作成して Web ページ B を読み込みます。
<script>
var iframe = document.createElement('iframe');
document.body.insertBefore(iframe, document.body.firstChild)
iframe.src = 'http://webim.xx.com';
</script>
ウェブページ B でドメインを「xx.com」に設定
<script>document.domain = 'xx.com';</script>
次に、Web ページ B の localStorage にアクセスします。
Web ページ A で、次のコードを実行します。
window.iframe.contentWindow.localStorage.setItem('a', 'a')
次に、エラーが表示されます。
Error: The operation is insecure.
以前のバージョンまたは他のブラウザーでは、コードは正常に実行できます。
理由を知っている人はいますか?
バグですか?
そして..この問題を解決するには?どうも。
ちょうど今、この問題を解決する方法を見つけました。
localStorage に直接アクセスすることはできませんが、独自の Web ページの localStroage を呼び出すことができるiframe の関数を呼び出すことができます。
/// webpage B
<script>
document.domain = 'xx.com';
var ls = { ///< ls is short for localStorage.
setItem: function(k, v) {
return localStorage.setItem(k, v);
},
getItem: function(k) {
return localStorage.getItem(k);
},
removeItem: function(k) {
return localStorage.removeItem(k);
},
clear: function(){
return localStorage.clear();
}
}
</script>
次に、 ls.setItemなどを呼び出して、iframe の localStorage にアクセスします。
/// webpage A
<script>iframe.ls.setItem('a', 'b');</script>
私はこの問題を解決できますが、なぜ firefox 13.0 がこの問題を引き起こすのですか?