我做了一个简单的自动表单填充,通过从创建的html向后台发送信息,然后发送内容脚本,因此注入的脚本可以更改表单上的信息。
我知道一旦页面加载就会运行内容脚本。我想知道我是否可以再次运行内容脚本,而无需重新加载页面。
我在内容脚本中获得了sendRequest
函数,我用它来确保它只在页面准备就绪时获取信息。然后将信息添加到表单中,等待我发送。
在内容脚本中,我添加了一个onRequest
,它可以正常运行(它获取信息)。但是,我没有看到表单上的更改,除非我正在对页面进行编码。
我想知道是否可以这样做,如果它确实应该学习哪些科目来实现这一目标。
我是chrome extentions的新手,我还在学习:) 在其中一个页面中,我使用了jQuery,所以jQuery的答案也会很好。
答案 0 :(得分: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.
});
答案 1 :(得分:1)
表单的目标可能是iframe,可以避免页面重新加载。不确定它有多么有用。
答案 2 :(得分:1)
再次执行内容脚本的正确方法是使用chrome.tabs.executeScript
方法。它收到两个参数。第一个参数是tabId
,可以通过多种方式获得,例如one of the chrome.tabs
events。使用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');
(必须使用onMessage
和sendMessage
代替onRequest
和sendRequest
,因为Chrome 20)