javascript - 如何使用页面操作将消息从 popup.js 发送到 background.js,以便它执行内容脚本?
问题描述
我做了我的第一个浏览器扩展。第一个版本运行良好,但可以改进,所以我正在重构....在这个新版本中,我使用的是 apage_action
因为这个扩展只适用于一个 url 模式很重要:*://*.website.com/abc*
. 弹出窗口仅在此页面上显示正常,不会在其他页面上显示 - 完全符合我的要求,但我无法popup.js
向我发送消息,background.js
因此它在当前浏览器的 DOM 上运行编程注入网址通过content_script.js
。
出于某种原因,它还在每一页上都将图标显示为彩色(我想要灰色),我的印象是该ShowPageAction()
方法可以自动将不符合条件的任何内容变灰。这是我的所有代码。
manifest.js
{
"name": ".........",
"description" : "...........",
"version": "1.0",
"manifest_version": 2,
"icons": {
"16": "images/a.png",
"32": "images/b.png",
"48": "images/c.png",
"128": "images/d.png"
},
"page_action": {
"default_popup": "popup.html",
"default_icon": {
"16": "images/a.png",
"32": "images/b.png",
"48": "images/c.png",
"128": "images/d.png"
}
},
"background": {
"scripts": ["background.js"],
"persistent": false
},
"permissions": ["tabs", "activeTab", "declarativeContent", "storage", "webNavigation", "*://*.website.com/abc*"],
}
背景.js
下面的第二个听众没有收到消息。
chrome.runtime.onInstalled.addListener(function() {
chrome.storage.local.set({some_val: 0});
chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
chrome.declarativeContent.onPageChanged.addRules([{
conditions: [new chrome.declarativeContent.PageStateMatcher(
{pageUrl: {urlContains: '.website.com/abc'},}
)],
actions: [new chrome.declarativeContent.ShowPageAction()]
}]);
});
});
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
if (message.some_msg == 'some_msg'){
chrome.tabs.executeScript(null, {file: 'content_script.js'});
}
});
popup.js
对于以下内容,我已经尝试了chrome.tabs.sendMessage()
和chrome.runtime.sendMessage()
,但都没有工作...my_function
也绑定到弹出窗口上的事件处理程序,并且工作正常,只是没有sendMessage()
。
function my_function(){
....
// chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
// chrome.tabs.sendMessage(tabs[0].id, {some_msg : 'some_msg'})
// })
chrome.runtime.sendMessage({some_msg : 'some_msg'});
....
};
content_script.js
var e = document.getElementById('abcde');
// do stuff with the browser DOM ---- NOT the popup DOM.
我究竟做错了什么?
解决方案
推荐阅读
- google-apps-script - 尝试使用独立脚本时出现“找不到脚本函数”
- google-cloud-functions - gcloud功能:找不到本地工件:如何解决?
- python - Pypi:InvalidDistribution:分发元数据无效。如果可能,尝试升级 twine
- javascript - 你如何在java脚本中调用字典项
- compression - 解压缩没有文件签名/标题的 gzip
- python - 无法从雅虎财经抓取数据
- arrays - 在单独的函数中分配结构中的数组
- statistics - 具有聚类数据的两个变量的平均值之间的差异
- flutter - 每 1 小时检查一次用户是否存在于数据库中[Flutter]
- python - joblib 与大型 pandas.DataFrame 并行慢