我试图自动完成从ebay页面获取客户数据并将其插入到另一个页面中的表单的任务。我用了宏,但我不太喜欢它。
镀铬扩展适合这种工作吗?
如果是的话,那么dom逻辑应该在后台页面上还是在内容脚本中呢?
有人能给我提供一个简单的代码示例吗?
发布于 2014-10-14 14:32:12
注意事项:自2021年1月起,使用带chrome.scripting.executeScript()和scripting权限的舱单V3,并将<all_urls>移动到host_permissions,而不是使用带有tabs权限的不推荐的chrome.tabs.executeScript()。
任务
这里您需要的是一个Chrome扩展,它可以使用内容脚本在选项卡中读取客户页的DOM内容,然后存储信息并将其发送到另一个选项卡。
基本上,你需要:
执行情况:
因此,首先,您的manifest.json将需要访问选项卡和所需URL的权限,以及后台脚本的声明,如下所示:
{
"manifest_version": 2,
"name": "Extension name",
"description": "Your description...",
"version": "1",
"permissions": [
"<all_urls>",
"tabs"
],
"background": { "scripts": ["background.js"] }
}现在,按照以下步骤:
chrome.tabs.onUpdated添加一个侦听器以查找客户页面并注入第一个内容脚本,再加上使用表单查找选项卡并注入第二个脚本,所有这些都来自background.js:
chrome.tabs.onUpdated.addListener(function(tabID,info,选项卡){ if (~tab.url.indexOf("someWord")) { chrome.tabs.executeScript(tabID,{file:"get_data.js"});//第一个脚本获取数据} if (~tab.url.indexOf("someOtherWord")) { chrome.tabs.executeScript(tabID,{file:"use_data.js"});//第二个脚本使用表单}中的数据);
好,如果get_data.js包含"someWord",那么上面的代码将在页面中注入use_data.js脚本(显然,必须用正确的单词替换"someWord“和"someOtherWord”,以标识正确的页面URL )。get_data.js中,您需要检索数据并使用chrome.runtime.sendMessage将其发送到background.js脚本,如下所示:
var myData =myData //只是一个示例chrome.runtime.sendMessage({myData:“这里是数据”,data: myData});background.js内部,您需要一个侦听器来捕获并详细说明它:
chrome.runtime.onMessage.addListener(function(request,发送方,sendResponse) { if (request.message =“这里是数据”){ //详细说明它的chrome.tabs.query({url:“*://request.message/page/to/match/*”},函数(制表符){ chrome.tabs.sendMessage(tab.id,{message:“这里是数据”,data: request.data});};});use_data.js )中侦听该消息,并在表单中使用它:
chrome.runtime.onMessage.addListener(function(request,发件人,sendResponse) { if (request.message ==“这里是数据”){ //使用数据在页面中做某事: var myData = request.data;//例如: document.getElementById("input-id").textContent = data;});你就完蛋了!
文档
这只是一个例子,我强烈建议您查阅文档以充分了解要使用的函数和方法,以下是一些有用的链接:
https://stackoverflow.com/questions/26359206
复制相似问题