0

このWeb ページに自動的にログインする Chrome の拡張機能を作成しようとしています。これは、ページに入ったときにそれを検出することによって行われ、ブラウザをログイン ページにリダイレクトし、そこでユーザー名とパスワードを入力してログイン ボタンをクリックします。

マニフェスト.json:

{
    "manifest_version": 2,

    "name": "Login",
    "description": "Automaticly logs in to a page",
    "version": "1.0",
    "background": {
        "scripts": ["background.js"],
        "persistent": false
    },

    "permissions": [
        "tabs",
        "http://*/"
    ]
}

background.js:

window.onload = function() {
    chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab){
        if (tab.url == "https://www.itslearning.com/Index.aspx?customerid=&username=&redirectlogin=itslearning.com&MustUseSsl=true&") {
            chrome.tabs.update(tabId, {"url": "https://vaf.itslearning.com/elogin/"}, function(){});
        } else if(tab.url == "https://vaf.itslearning.com/elogin/") {
            var username = document.getElementById("ctl00_Username"); //doesn't work
            var password = document.getElementById("ctl00_Password"); //doesn't work
            var button = document.getElementById("ctl00_ButtonLogin"); //doesn't work
            if (username && password && button) {
                username.value = "####";
                password.value = "######";
                button.click();
            }
        }
    });
};

右クリックしてフィールドのIDを取得しました->クロムの要素を検査します。最初に実行したとき、ブラウザは正しいページにリダイレクトされましたが、パスワードとユーザー名が入力されていなかったため、簡単なデバッグを行ったところ、フィールドがまったく見つからないようです。フォーラムを検索したところ、最初にページを完全にロードする必要があることがわかったので、追加しましwindow.onload=function(){}たが、それでも機能しません。なんで?

以前にJavaScriptで少しプログラミングしたことがありますが、Chrome拡張機能の開発は初めてなので、追加のヒントや提案があれば教えてください.

4

1 に答える 1

2

バックグラウンド スクリプトは、通常のページの DOM と直接対話できません。バックグラウンド スクリプトで使用する場合document、Google Chrome が拡張機能用に作成するバックグラウンド ページの DOM を参照しています。

Web ページの DOM にアクセスするには、コンテンツ スクリプトが必要です。マニフェストで指定するか、 を使用してプログラムで挿入できますchrome.tabs.executeScript。あなたの場合、常に特定の URL で実行したい場合のように、最も簡単な方法はマニフェストを使用することです。

"content_scripts": [
  {
    "matches": ["https://vaf.itslearning.com/elogin/"],
    "js": ["content.js"]
  }
],

そして content.js に以下を入れることができます:

var username = document.getElementById("ctl00_Username");
var password = document.getElementById("ctl00_Password");
var button = document.getElementById("ctl00_ButtonLogin");
if (username && password && button) {
   username.value = "####";
   password.value = "######";
   button.click();
}

したがって、background.js では、リダイレクト コードを残すだけで済みます。

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    if (tab.url == "https://www.itslearning.com/Index.aspx?customerid=&username=&redirectlogin=itslearning.com&MustUseSsl=true&")
        chrome.tabs.update(tabId, {"url": "https://vaf.itslearning.com/elogin/"});
}

(ところで、を使用してリダイレクトを発生させるより効率的な方法がありますchrome.webRequest)

于 2013-09-27T17:23:49.553 に答える