2016-04-18 14 views
0

JSONファイルを拡張子web_accessible_resourcesに保存して、同期XHRを使用してコンテンツスクリプトが読むことができるようにする必要があります(同期部分が重要なので、 XHR)。Chrome拡張:web_accessible_resourcesを編集する

しかし、このファイルは、ユーザーが拡張機能のインターフェースを使用するアクションを反映しているため、ユーザーが何かを変更すると、JSONファイルがバックグラウンドページによって書き換えられます(これは非同期で発生する可能性があります)。このようにして、次にコンテンツスクリプトがファイルを読み込むと、最新の状態になります。

web_accessible_resourcesに記載されているファイルを拡張機能で変更する方法はありますか?

また、最後のリソースとして、エクステンションをテキストエディタで開いてユーザーに直接編集させることもできますが、Chromeで拡張機能が危険にさらされていると判断する恐れがあります無効にします。

+0

なぜ同期する必要がありますか? –

+0

コンテンツスクリプトは、ページから何かが読み込まれる前にいくつかのコードを挿入する必要がありますが、そのコードはコンテンツスクリプトにはない情報に依存するため、ファイルまたはバックグラウンドページから(同期的に)フェッチする必要があります。 – user3648026

答えて

2

拡張子のファイルの内容を変更することはできません。

この状況でできることは、chrome.storage.onChangedイベントを使用することです。

  1. あなたの背景ページは、chrome.storageの情報を更新します。
  2. コンテンツスクリプトでchrome.storage.onChangedがトリガーされます。あなたは、データのローカルコピーを保存することによってそれに反応します。ストレージを照会する必要もなく、新しいデータがイベントで使用可能です。
  3. データのローカルコピーに同期してアクセスします。

これは、最初に非同期にデータを設定する必要があるため、コンテンツスクリプトが実行を開始したときのデータの問題には対処しません。しかし、同期XHRは非常に厄介なアイデアです。

もっと多くのアイデアはhereに記載されています。それらのどれもかなり複雑なハックですが、Chromeのofficial position is "won't happen"です。

P.S.そして、XHRに対する可変応答を実際に求めるこの質問に誰かが来る場合は、 APIを使用して、データを含むURI data:にリダイレクトすることができます。そのキャッチは、URI自体が同期的に構築/利用可能でなければならないということです。

+0

リンクされた質問に記載されているFile APIメソッドを使用しました。あなたが言ったように、それはちょっとしたハックですが、私が望むものを達成するための適切な「クリーン」な方法ではないようです。説明をありがとう。 – user3648026

1

fileSystem APIがあるため、これは可能ではないと思います。私はあなたの特別なユースケースを知っていませんが、拡張子が始まるとファイルを読み込む可能性はありませんか?ほとんどの場合、読み込みはユーザが対話する前に行う必要があります。

+0

ファイルはコンテンツスクリプトによって読み込まれる必要があるため、ページが訪問されるたびに読み込まれます。私は[chrome.storage](https://developer.chrome.com/extensions/storage)または[メッセージパッシング](https://developer.chrome.com/extensions/messaging)を使用して、必要な情報をコンテンツスクリプトは、両方とも非同期です。 – user3648026