webdino / amethyst

Simple WebViewer App for embedded systems (patches for Firefox/Gecko)
https://gecko-embedded.org/docs/webviewer/
5 stars 1 forks source link

window.parent が window と一致せず browser.xul となる #31

Closed dynamis closed 5 years ago

dynamis commented 5 years ago

xul iframe でコンテンツを読み込んでいるとコンテンツページのコンテキストは通常のブラウザのコンテキストではなく、xul ファイルの中の iframe としてのコンテキストになってしまっている。

具体的には window.parent が普通はトップレベルでは undefined になるはずが browser.xul オブジェクトになる。その結果。window.parent.postMessage() とかしようとすると Permission denied to access property "postMessage" などと言われる。

組込 UI 向けに専用でコンテンツを作っている限りは問題にならないが、一般の Web との互換性が損なわれてしまっているため出来ればこの非互換は制限事項では無く解決したい。

現在の Firefox の browser.xul では iframe ではなく tabbox > tabpanel にコンテンツを読み込んでいるようなので、そのあたり参考にして同様の挙動になる方法を探りたい。

hATrayflood commented 5 years ago

@dynamis https://github.com/webdino/amethyst/commit/c86b3cf80e5c0830aec5d8bed57b0fd08b9ddfd2 iframeからbrowserに変更したので、こちらも何か挙動に変化があるかもしれません。

hATrayflood commented 5 years ago

iframeからbrowserに変更した状態で、console.log(window.parent);した結果をWebIDEで調べたところ、browser.xulのbrowserの上にあるwindowではなく自身を返す動作になってるようで、これは通常のブラウザと同じ動作です。 あらためてご確認をお願いします。 @dynamis

dynamis commented 5 years ago

iframe から browser にしたら window == window.parent が true となり、リモートデバッグもこれまで通りできるし、その他ぱっと見た感じでは期待通りになっているので解決としてクローズします。