2

我正在尝试为 chrome 制作一个自动登录按钮扩展。我的代码如下:

选项.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()">

登录.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

您必须将tab.id而不是传递null给 executeScript 函数,并且chrome.tabs.create仅将tab参数传递给回调函数, no tabId,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 回答