crossrider サイドパネルは単なる iframe です (js を挿入した html を使用できますが、ページの残りの部分との干渉を減らすために iframe を使用することに興味があります)。ブラウザ拡張機能と iframe の間のやり取りがまったくできません。
基本的な JS 通信ができない限り、サイドパネルに拡張機能を追加しても意味がありません。この場合、拡張機能を制御する iframe にいくつかのオプション、チェックボックスなどが必要です。このプラグインが存在するので、方法があるに違いないと思います。
理想的には、子 iframe にいくつかの基本的な入力処理 js を用意し、奇妙な保存/読み込みコマンドを送り返したいと考えています。答えは本当に何らかの形のメッセージ パッシングですか? もしそうなら、ここでどの API を使用すればよいですか?
これは関連していると思います: Accessing iframe from chrome extension
[編集]
OK、いくつか試してみました...
予想される使用法は、iframe の html コンテンツをどこかにホストすることです。ローカルであり、拡張機能の一部であることを考えると、少し奇妙です。一部のページをオフラインで表示したい場合はどうなりますか?? これはばかげているので、オプションとして却下します。ローカルで利用できるはずのものをホストしているリソースを無駄にするのはなぜですか。
別の方法は、サイドバーに表示される HTML を提供することです。この HTML は iframe に配置されないことに注意してください。CSS と JS が非常に分離されているため、iframe のアイデアが気に入っています。そのため、ページと拡張機能の間の干渉が最小限に抑えられます。
html
そこで、ID を使用して sidebar 属性を介して iframe を作成し、100 ミリ秒の遅延後に を使用してコンテンツを挿入しようとしましたmyiframe.contentWindow.document.open/writeln/close()
。The operation is insecure
これは chrome では問題なく動作しますが、firefox ではセキュリティ エラー ( on )で失敗しますopen()
。もう 1 つの方法は、
src
URL を介して iframe コンテンツを提供することです (サイドバーの場合、属性にデータ アドレスを使用しurl
ます): URL ではなく、IFRAME ソースとしての Html コード。これは firefox では機能しますが、chrome では CORS エラーが発生しますThe frame requesting access has a protocol of "http", the frame being accessed has a protocol of "data". Protocols must match.
。Warning: Blocked a frame with origin "http://localhost" from accessing a cross-origin frame. Function-name: appAPI.message.addListener
これらの CORS の問題は、本当にばかげていると思います。同じページに挿入された、同じ拡張機能からのすべてのコードです。クロスオリジンが起こっているわけではありません。私はいまいましいものを作成しました。オリジンを変更する力がある場合、そもそも安全ではないので、なぜわざわざ。