可能有多个内容脚本为不同的功能
Possible to have multiple content scripts for different functions?
我是新来的,但我正试图创建一个chrome扩展来操纵网页上的dom。目前,我有两个按钮,每个按钮将做不同的任务。下面的内容有意义吗?此外,如果我有多个内容脚本,我怎么能把它们都添加到manifest.json
popup.js:
function injectTheScript() {
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
// query the active tab, which will be only one tab
//and inject the script in it
chrome.tabs.executeScript(tabs[0].id, {file: "content_script.js"});
});
}
function injectTheScript1() {
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
// query the active tab, which will be only one tab
//and inject the script in it
chrome.tabs.executeScript(tabs[0].id, {file: "content_script1.js"});
});
}
document.getElementById('clickactivity').addEventListener('click', injectTheScript);
document.getElementById('clickactivity1').addEventListener('click', injectTheScript1);
如何为每个函数注入一个内容脚本并没有错。但是,您可以通过不使用tabs.query()
来获取活动选项卡来简化它。tabs.executeScript()
使用的默认选项卡是当前活动的选项卡(即您从tabs.query()
获得的选项卡)。
根据您的设计和您想要做的事情,在为每个功能注入脚本或为启动所需功能发送消息的脚本之间,哪个是更好的选择。如果它们是相对罕见的函数(特别是由用户操作引起的,就像您的函数一样),那么为每个函数注入脚本通常是更好的选择(我在我的一个扩展中就是这样做的)。这当然比在大量网站上注入很少使用的脚本要好,当脚本只是在那里开始做一些事情时,它接收到来自后台脚本的消息。例如,一个等待用户与浏览器UI(不是内容UI)交互的扩展,然后从后台脚本向内容脚本发送消息以执行任务。在这种情况下,最好等到需要时再注入内容脚本。
显然,如果用户交互将从网页内开始,而不是浏览器UI,那么脚本需要注入到所有相关页面。当你这样做,你将需要使用内容脚本和后台脚本之间的消息传递,如果后台脚本需要做的事情,需要更广泛的访问后台脚本有扩展api。
manifest.json描述内容脚本注入没有更多关于如何将内容脚本添加到清单的信息。json(例如,方案(s),域名,页面(即url),脚本名称等),我们不能告诉你确切地如何做到这一点,除了阅读文档。我要说的是,您使用两个清单注入相同的内容脚本是不寻常的。json和tabs.executeScript()
. json。这样做本身并没有什么错。如果这是正确的事情,将取决于代码和网站。
文档中可能不清楚的一件事是content_scripts
键是一个对象数组。每个物体描述一组注射。对象中的所有文件都被注入到与该对象中提供的URL模式匹配的页面中。您可以在content_scripts
数组中拥有任意多的描述注射组的对象。
下面的示例使用manifest加载多个内容脚本,并将不同的内容脚本加载到不同的页面。json(改编自Chrome的内容脚本页面)。
在所有匹配https://www.google.com/*
的页面中,它将注入myGoogleStyles.css、jquery.js和myGoogleScript.js。在所有匹配
http://www.example.com/*
的页面中,它将注入myExampleStyles.css、jquery.js和myExampleScript.js:
"content_scripts": [
{
"matches": ["https://www.google.com/*"],
"css": ["myGoogleStyles.css"],
"js": ["jquery.js", "myGoogleScript.js"]
},
{
"matches": ["http://www.example.com/*"],
"css": ["myExampleStyles.css"],
"js": ["jquery.js", "myExampleScript.js"]
}
],
- 如何使用Java脚本创建提交按钮's的拖放功能
- 如何将脚本的不同功能放在同一个html页面中
- 如何创建一个脚本,该脚本给定网站列表,它使用其搜索功能来获取信息
- 谷歌应用程序脚本搜索UI下一个和上一个功能
- 从用户脚本空间重新定义Firefox中的原生浏览器功能
- 加速谷歌脚本中的onEdit功能-有时没有响应
- 我想构建一个代码,在谷歌应用程序脚本中检查我在Gmail中导入的邮件,我该如何找到这个功能
- 功能中断 iPhone 的脚本(新手)
- jQuery脚本的功能相互重叠
- 如何在脚本标记的功能中初始化会话
- 是否可以在js脚本中包含php文件并访问该php文件的功能
- 使用 greasemonkey 禁用现有脚本中的焦点功能
- 谷歌应用脚本 - 将一些功能移动到单独的文件中
- Firefox CloneInto 不会将功能从附加脚本复制到页面脚本
- 用于功能模块化的聚合物脚本专用组件
- 将多列添加到谷歌脚本Vlookup功能
- 如何从浏览器的JS控制台控制Tampermonkey脚本的功能
- Chrome 不会停止缓存脚本,即使禁用了缓存功能也是如此
- 如何在从线程收到一些结果后使用 java 脚本停止自动刷新功能
- 如何在 javascript 中取消打印功能后重新加载脚本