是否可以在不重新加载的情况下运行注入的脚本
Is it possible to run the injected script without reload?
我做了一个简单的自动表单填充器,将创建的html中的信息发送到后台,然后发送内容脚本,这样注入的脚本就可以更改表单上的信息。
我知道内容脚本会在页面加载后运行。我想知道我是否可以再次运行内容脚本,而无需重新加载页面。
我在内容脚本中获得了sendRequest
函数,我用它来确保它只在页面准备好时获得信息。然后它将信息添加到表格中,等待我发送。
在内容脚本中,我添加了一个onRequest
,它可以工作(它可以获取信息)。但是,我看不到表单上的更改,除非我正在重新编码页面。
我想知道这是否可行,如果可行,我应该学习哪些科目来实现这一点。
我是chrome extensions的新手,我仍在学习:)在其中的一页中,我使用了jQuery,所以用jQuery回答也很好。
我发现,如果我们从背景创建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.
});
表单的目标可以是避免页面重载的iframe。不确定它有多有用。
再次执行内容脚本的正确方法是使用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');
(由于Chrome 20,必须使用onMessage
和sendMessage
来代替onRequest
和sendRequest
)
- ROR:如何在不重新加载浏览器的情况下从控制器获取参数
- 第二组标签及其内容赢得'默认情况下t加载
- 如何从 API 填充数据并加载到下拉列表中
- 使用 vent.js 传递参数.如何在触发事件后加载的下一个页面视图中读取该数据
- 如何加载使用下拉列表生成的新页面更改
- 使用挖空将数据从数据库加载到下拉列表
- 将事件处理程序附加到通过PHP加载的下拉选项html
- KnockoutJS-将值加载到下拉列表.“选定值”始终为null
- 如何从属性文件加载html下拉列表
- 如何基于其他下拉数据加载Jqgrid下拉列表
- 对加载相关下拉列表的性能影响,最多约30000条记录
- 加载外部下划线模板
- 通过AJAX加载(WordPress)下一个帖子页面的特定部分
- 使用jquery将数据加载到下标按钮中
- 在页面加载条件下运行JS函数
- 网页加载向下滚动了一部分
- javascript/php获胜't加载依赖下拉列表中第一个选项的数据
- 使用 javascript 预加载 HTML 下拉列表
- 在单个文件中加载骨干/下划线模板
- 计算页面加载到下一小时的第一分钟之间的秒数