6

私は最初のChrome拡張機能を書いていますが、これは数時間前に始めたばかりです。ハードコーディングすると、すべてがうまく機能しました。基本的に、私は8ページのフォームに記入しています。フォームの各ページは、個別のコンテンツスクリプトに対応しています。以前のコンテンツスクリプトは次のようになりました:(フィールドは標準ではないため、フィールドを見つけるのは少し難しいですが、私はそれについて心配していません..その部分は機能します)

var first_name = 'John';
var last_name = 'Doe';
...
...
document.getElementById('first_name').value = first_name;
document.getElementById('last_name').value = last_name;

これは(私にとっては)問題なく機能しましたが、ソースコードの拡張機能を使用して変数を直接編集する人がいない、数人に配布したいと思います。そこで、これを例として使用して、「オプション」ページを作成しました: https ://developer.chrome.com/trunk/extensions/options.html

オプションページは入力するフォームのモックアップであり、各ユーザーはここにデフォルトを入力できます。私のsave_options()関数は基本的に(擬似コード)を行います:

foreach(fields as field) {
    localStorage[field] = document.getElement....(field);
}

これは正常に機能します。正しく保存され、保存された値などが表示されます。

コンテンツスクリプトから変数にアクセスしようとすると、問題が発生します。私が読んだことから、これは(直接)行うことはできず、これを行う方法を示すさまざまな方法がオンラインにあります。私はこのようなことをしたい(コンテンツスクリプト):

var first_name = localStorage["first_name"];
var last_name = localStorage["last_name"];
...
...
document.getElementById('first_name').value = first_name;
document.getElementById('last_name').value = last_name;

私の質問は次のとおりです。

1)Chrome拡張機能/localstorage/chrome.storage/etcを扱ったことがある人にとって、これを行うための「最良の」方法はありますか?

2)すべての変数名/値を設定する最も効率的な方法は何ですか?個別のリクエストで各フィールドを設定するよりも、(上記のような)ループを使用したいと思います。1ページあたり平均10フィールドです。

(私はおそらくhttp://developer.chrome.com/extensions/messaging.htmlの長くて厄介な形式を使用することができますが、より効率的/拡張可能/エレガントなソリューションを望んでいます)

どんな入力でも大歓迎です!

4

1 に答える 1

8

1つの解決策は、前述のメッセージパッシングを使用することです。

もう1つの(より良いと思う)ソリューションはchrome.storageAPIです(詳細については、 http://developer.chrome.com/extensions/storage.htmlを参照してください)。Storage APIは、バックグラウンドページとコンテンツスクリプトの両方で直接使用できます。値をの下に保存すると、Chromeは自動的に同期されますchrome.storage.sync。localStorageとの唯一の大きな違いは、このAPIが非同期であるため、次のようなコードを作成する必要があることです。

chrome.storage.sync.get(['first_name', 'last_name'], function(items){
    document.getElementById('first_name').value = items['first_name'];
    document.getElementById('last_name').value = items['last_name'];
});
于 2012-12-10T05:33:37.270 に答える