ほとんどの場合、コードは正しいようです。1 つだけ注意してください: オプション ページはlocalStorage
直接アクセスできます。そのためのバックグラウンド ページは必要ありません。しかし、主な問題は、コンテンツ スクリプトの作成方法にあるようです。これは、ユーザー/パスワード データがすぐに (同期的に) 利用可能になることを前提としています。バックグラウンド ページにメッセージを送信すると、最終的にバックグラウンド ページが応答し、コンテンツ スクリプト内のコールバックが呼び出されます。最も簡単な方法は、すべてのアクションが発生してデータが得られるまで遅らせることです。また、すべてのデータを提供するバックグラウンド ページに 1 つのメッセージを送信する方が簡単なはずです。このようなもの:
var userName = null;
var passWord = null;
chrome.extension.sendRequest( { eventName: "getLogin" },
function(response) {
userName = response.user;
passWord = response.pass;
// Now we can continue doing whatever we are doing
checkIfAutoUrl();
}
);
バックグラウンド ページでのメッセージ処理は次のようになります。
function onRequest(request, sender, sendResponse) {
if (request.eventName == "getLogin") {
sendResponse({user: getStorage("user"), pass: getStorage("pass")});
}
}
user
応答は 2 つのプロパティを持つオブジェクトであることに注意してください。pass
このように、コンテンツ スクリプトは応答を受け取るとすぐに続行でき、必要なデータがすべて含まれており、2 回目の応答を待つ必要がありません。
更新: 表示されるエラー メッセージについて:コンテンツ セキュリティ ポリシーは、拡張機能が悪意のある Web サイトによって悪用されるのを防ぐことを目的としています。その保護の 1 つは、HTML のようなインライン スクリプトを禁止することですonload="load_options()"
。実行するすべてのスクリプトは、JavaScript ファイルに配置する必要があります。したがって、このonload
属性の代わりに、次のものを に入れることができますoptions.js
:
window.addEventListener("load", load_options, false);
addEventListener
MDN のドキュメントを参照してください。