0

これを行うChrome拡張機能を作成したいと思います(Webサイトに自動的にログオンします。JSを初めて使用したため、おそらく最良のアプローチではありません)。ユーザーが自分の情報を設定して保存できるオプションページ(localstorage ?) コンテンツ スクリプトがオプション ページと同様にアクセスできるようにします。

例などを見て、たくさんの調査を行った結果、私がたどり着いたのは次の とおりです。 http://pastebin.com/yTiXp4VY (そこにあるすべてのファイルのソースコード)。

結局あきらめて試行錯誤しただけなので、そこにはたくさんのエラーがあります。コンソールは、セキュリティ上の理由から実行できないと報告しています。このバージョンの問題点を教えてください。コードを修正する必要はありません。JS を学習しているだけです。

4

1 に答える 1

0

ほとんどの場合、コードは正しいようです。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);

addEventListenerMDN のドキュメントを参照してください。

于 2012-05-21T10:30:34.263 に答える