2

Chromeの自動ログインボタン拡張機能を作成しようとしています。私のコードは次のとおりです。

options.html:

function gotoAdmin(){
    chrome.tabs.create({'url': "http://www."+currentTabDomain+"/admin"}, function(tabId,changeInfo,tab) {
        chrome.tabs.executeScript(null, {file: "login.js"});
    });
}

...

<img src="admin.png" onClick="gotoAdmin()">

login.js:

$(document).ready(function(){
    $('input[name=username]').val('foo');
    $('input[name=password]').val('bar');
    $('#form').submit();
});

マニフェスト.json:

"permissions": [
    "tabs", "http://*/*", "https://*/*"
],
"content_scripts": [
    {
        "matches": ["<all_urls>"],
        "js": ["jquery-1.7.2.min.js"],
        "run_at": "document_start"
    }
],
"background": {
    "scripts": ["background.js"]
}

私の問題は、開発者コンソールからオプションタブを開いてgotoAdmin()を起動すると、jQueryイベントが正常に実行され、自動ログインが機能することですが、開発者コンソールを開かずに画像をクリックすると、機能しません。 login.jsからは何でも(アラートを開かなくても)。

4

2 に答える 2

4

私はパーティーに参加するのが遅すぎますが、誰かが同様の問題への答えを探しているときにこの質問にたどり着いた場合に備えて(私がしたように)、これが私が使用した解決策です:

まず、最初に:

問題は、新しいタブが開かれるとすぐにポップアップウィンドウが閉じ、その中で実行されているJSも停止することです。したがって、chrome.tabs.create(<specs>, <callback>)はポップアップウィンドウに表示されていたため、コールバック関数は実行されません。

ソリューション:

解決策は、バックグラウンドページ(またはより適切にはイベントページ)にタブ作成プロセスを処理させることです。次に、背景/イベントページに通知して、プロセスを開始する必要があります。

ステップ1:
ポップアップで、

// Add whatever arguments you need to pass, in <msg>
chrome.runtime.sendMessage(msg);

ステップ2:
背景/イベントページにメッセージを受信させ、行動させます。

// a. Listen for a message, adding a listener.
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
  // I got the message, let's parse it.
    ...

  // b. Act upon it, creating the tab etc.
  chrome.tabs.create(<specs>, <callback>);
  ...
});

また、メッセージパッシングに関する詳細については、ドキュメントを参照してください。

于 2013-07-30T14:18:41.703 に答える
0

executeScript関数のtab.id代わりにを渡す必要があり、引数のみをコールバック関数に渡します。nullchrome.tabs.createtabtabId,changeInfo,tab

   chrome.tabs.create({'url': "http://www."+currentTabDomain+"/admin"}, function(tab) {
        chrome.tabs.executeScript(tab.id, {file: "login.js"});
    });
于 2012-04-24T00:37:07.073 に答える