Sep 11, 2005

ソースをタブで開けない問題

TBEの「ページのソースをタブで開けるようにする機能」がうまく働かない問題について。原因は、本来新規ウィンドウとして開くはずであったchrome://global/content/viewSource.xul(viewPartialSource.xul)をタブの中に読み込んだ際に、そのウィンドウへ引数を渡す手段がなくなってしまったせいだ。

XULWindow.openDialog()は、第4引数以降の引数を開かれたウィンドウのwindow.argumentsオブジェクトに格納する。viewSource.xulやviewPartialSource.xulでは、ここからどのページのソースを開けばよいのかという情報を取得する。しかし、タブの中に読み込まれたドキュメントのウィンドウには、window.argumentsが無い。そのためこれまでは、タブの読み込みが完了した時点で、ブラウザウィンドウのコンテキストにおいて、内容ウィンドウのwindowオブジェクトにargumentsという名前のプロパティを手動で追加していた。

ところが、昨今のセキュリティの向上によって、ブラウザウィンドウのコンテキストにおいてアクセスした内容ウィンドウのwindowオブジェクトおよびそこに属しているあらゆるオブジェクトにセットしたプロパティは、内容ウィンドウのコンテキストからはアクセスできなくなってしまった。これにより、TBEは「ソースを開く」処理を行うXULドキュメントに対して「どこのソースを開けばよいのか」という情報を受け渡す手段を失ってしまった。

今、何かうまい対策はないものかと思案しているけれども、これはもうどうにもならないような気がする。特に、選択範囲の情報を受け渡さなくてはならないviewPartialSource.xul, viewPartialSource.jsは、本気でなんとかしようと思ったら、自力で全ての挙動を再現しなくてはならないような勢いだ。

ということで4時間くらい行き詰まってウンザリしたので考えるのをやめた。鬱。誰か助けて。

ていうかもうあまりの報われなさにやる気なくした。

エントリを編集します。

wikieditish message: Ready to edit this entry.











拡張機能