0

我做了一个简单的自动表单填充器,将信息从创建的 html 发送到后台,然后发送到内容脚本,因此注入的脚本可以更改表单上的信息。

我知道一旦页面加载,内容脚本就会运行。我想知道是否可以再次运行内容脚本,而无需重新加载页面。

sendRequest在内容脚本中获得了功能,我用它来确保它只有在页面准备好时才能获取信息。然后它将信息添加到表单中,然后等待我发送。

在内容脚本中,我添加了一个onRequest并且它可以工作(它获取信息)。但是,我看不到表单上的更改,除非我正在重新编辑页面。

我想知道是否可以这样做,如果可以,我应该学习哪些科目来实现这一点。

我是 chrome 扩展的新手,我仍在学习 :) 在其中 1 个页面中,我使用 jQuery,因此使用 jQuery 的答案也很好。

4

3 回答 3

2

我发现如果我们chrome.tabs.sendRequest后台创建一个,我们可以使用内容脚本中的chrome.extestion.onRequest并且每次都会执行,因为它们几乎同时运行。

所以我从背景做了:

  chrome.tabs.query({}, function (tabs) {
        for (var i = 0; i < tabs.length; i++) {
            chrome.tabs.sendRequest(tabs[i].id, {...requests u want to send  }, function (response) {

            });

        }
    });

来自内容脚本

chrome.extension.onRequest.addListener(function (request, sender, sendRespons) {
      //get requested info here
      //call functions.

      sendResponse({}); //send info back to background page.
});
于 2012-07-13T17:30:41.457 回答
1

表单的目标可以是避免页面重新加载的 iframe。不确定它会有多大用处。

于 2012-07-13T15:14:03.927 回答
1

再次执行内容脚本的正确方法是使用chrome.tabs.executeScript方法。它接收两个参数。第一个参数是tabId,可以通过多种方式获得,例如其中一个chrome.tabs事件。用于null在当前选定的选项卡中执行内容脚本(注意:这也可能是一个活动的开发工具窗口!)。

例子:

// Reloads the current tab
chrome.tabs.executeScript(null, {code:'location.reload();'});

// Executes contentscript.js in the current tab
chrome.tabs.executeScript(null, {file:'contentscript.js'});

// Executes contentscript.js in all frames in the current tab
chrome.tabs.executeScript(null, {file:'contentscript.js', allFrames: true});

// Receives message from content script, and execute a content script:
chrome.extension.onMessage.addListener(function(details) {
    if (details.message === 'load a content script') {
        chrome.tabs.executeScript(details.sender.tab.id, {file: 'a_script.js'});
    }
});
     // The previous one is activated from a content script, as follows:
     chrome.extension.sendMessage('load a content script');

( onMessageandsendMessage必须用来代替onRequestand sendRequest,因为 Chrome 20)

于 2012-07-13T19:54:57.600 回答