从工具栏运行内容脚本
Run Content Script From Toolbar
我想要一个Chrome扩展程序来替换页面上的文本。我已经让所有代码都在 Javascript 方面工作,并且在页面加载时它可以完美运行,问题是我只希望它在您单击工具栏上的按钮时替换页面上的文本。
我在工具栏上设置了一个按钮,但替换的 Javascript 仍然只在页面加载时运行,而不是在您单击按钮时运行。此外,当您单击工具栏按钮时,尽管它没有执行任何操作,但它仍然显示弹出窗口的闪烁。我希望它做的只是在单击工具栏按钮时运行文本替换代码,而不显示弹出窗口.html框。
当前的代码如下:
Manifest.json
{
"name": "Browser Action",
"version": "0.0.1",
"manifest_version": 2,
"description": "Show how options page works",
// Needed to retrieve options from content script
"background": "background.html",
// This is how you load Browser Action. Nearly equal to Page one.
"browser_action": {
"default_icon": "icon.png",
"popup": "popup.html"
},
"content_scripts": [
{
"matches": ["http://*/*", "https://*/*"],
"js" : ["popup.js"]
}
]
}
弹出窗口.js
function htmlreplace(a, b, element) {
if (!element) element = document.body;
var nodes = element.childNodes;
for (var n=0; n<nodes.length; n++) {
if (nodes[n].nodeType == Node.TEXT_NODE) {
var r = new RegExp(a, 'gi');
nodes[n].textContent = nodes[n].textContent.replace(r, b);
} else {
htmlreplace(a, b, nodes[n]);
}
}
}
htmlreplace('a', 'IT WORKS!!!');
弹出窗口.html - 空白
背景.html
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(null, {file: "popup.js"});
});
您必须进行一些更改(rsanchez 提到了其中的大部分 - 但不是全部),并且可以/应该进行更多更改。
因此,我将演示一个可以/应该/必须更改的内容,而不是列出可以/应该/必须更改的内容。
首先要做的是 - 有关与您的问题/问题相关的几个关键概念的更多信息:
- 清单文件格式
- 权限
- 背景页面、活动页面
- 内容脚本
- 浏览器操作
扩展目录结构:
extension-root-directory/
|_____manifest.json
|_____background.js
|_____content.js
manifest.json:
{
"manifest_version": 2,
"name": "Test Extension",
"version": "0.0",
"offline_enabled": true,
"background": {
"persistent": false,
"scripts": ["./bg/background.js"]
},
"browser_action": {
"default_title": "Test Extension"
//"default_icon": {
// "19": "img/icon19.png",
// "38": "img/icon38.png"
//},
},
"permissions": [
"activeTab"
]
}
背景.js:
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(tab.id, { file: "content.js" });
});
内容.js:
function htmlReplace(a, b, element) {
if (!element) {
element = document.body;
}
var r = new RegExp(a, "gi");
var nodes = element.childNodes;
for (var n = 0; n < nodes.length; n++) {
if (nodes[n].nodeType == Node.TEXT_NODE) {
nodes[n].textContent = nodes[n].textContent.replace(r, b);
} else {
htmlReplace(a, b, nodes[n]);
}
}
}
htmlReplace("a", "IT WORKS !!!");
您只需对清单进行以下更改:
- 删除
content_scripts
部分。 - 删除
browser_action.popup
条目。 - 添加部分:
"permissions": ["activeTab"]
- 将"
background
"部分更改为:"background": { "scripts": ["background.js"] }
并将文件background.html
重命名为background.js
相关文章:
- Google 脚本:用于创建日历活动的脚本运行时不会出错,但不会执行任何操作
- Chrome没有加载最新版本的web工作程序脚本(运行缓存版本)
- 从 jquery.ready() 调用的 javascript 何时相对于 中的脚本运行
- 如何从其中的另一个jquery脚本运行.load()
- 这个对象构造函数阻止我的脚本运行
- 当作为脚本运行时.js Node中“this”的上下文是什么
- 如何使 Tampermonkey 添加的函数在脚本运行后在控制台中可用
- 当脚本运行时,它每秒将 4px 添加到我的容器的高度,只发生在 Firefox 中
- 我可以阻止我的 HTML 页面加载,直到我的 Facebook 登录状态脚本运行之后
- 从 PHP 脚本运行 Javascript 函数
- 我如何将脚本运行到从 jQuery 加载特定标签加载的另一个页面
- 在 PHP 脚本运行时添加加载图像
- 在IE中导致“脚本运行缓慢”警告
- Javascript - 脚本 1 停止,直到脚本 2 运行
- 脚本运行不正确的功能
- ajax脚本运行后指向页面的链接(javascript锚点?)
- 在脚本运行之前终止与浏览器的连接
- 脚本运行时,无法从FTP服务器自动下载文件
- 如何在外部JS脚本运行完成后运行函数
- 根据设备大小阻止脚本运行