我正在尝试构建一个简单的chrome扩展程序,当从内容脚本接收到的消息满足要求时,该扩展程序将删除特定页面的历史记录。我制作了内容脚本以返回文本,还编写了背景脚本,该脚本使用chrome.history.deleteRange()方法从给定的时间点清除了历史记录。调试器将chrome.history显示为未定义,即使我已将其添加到清单的权限列表中也是如此。有人可以帮我解决这个问题吗?
Manifest.json(还存在其他必需的部分,这是主要区域,因此已提供)
"browser_action": {
"default_icon" : "internet.png" ,
"default_title" : "Mark II test phase ",
"default_popup" : "popup.html"
},
"permissions" : [
"history" ,
"activeTab" ,
"tabs" ,
"http://*/" ,
"https://*/" ],
"content_scripts" : [{
"matches": ["<all_urls>"],
"js": ["content_script.js"]
}] ,
"background" : {
"scripts" : ["background.js"],
"persistent" : true
}
后台脚本:
chrome.runtime.onMessage.addListener ( async function ( message , sender , response ) {
// received message
// check for matches
var regex = /(\w|\s)*\w(?=")|\w+/g;
words = message.match(regex);
words.sort();
common_values = intersection ( words , values );
if ( common_values.length > THRESHOLD ) {
chrome.tabs.query({active: true,currentWindow: true}, function (tabs) {
var tab = tabs[0];
var url = tab.url;
console.log ( "Current url : " , url );
/*
// time == 1 min before starting this query
var start_time = (new Date()).getTime() - 1 * 60 * 1000;
var end_time = ( new Date()).getTime();
var range = new Object();
range.startTime = start_time ;
range.endTime = end_time ;
console.log ( "History type " , typeof (chrome.history) )
chrome.history.deleteRange ( range );
console.log("History cleared");
*/
delete_history();
});
}
});
调试器显示typeof(chrome.history)在后台页面中未定义: Debugger output
答案 0 :(得分:0)
我终于解决了这个问题。问题在于chrome正在重新加载清单中除权限之外的所有部分,因此该值显示为未定义。只需删除扩展名,然后再加载解压缩的扩展名即可解决此问题。
谢谢。
答案 1 :(得分:0)
我有一个类似的问题,即使清单中的权限正确,也未定义“ chrome.browsingData”。 我花了一些时间才了解,有3种方法可以在Chrome扩展程序中编写具有不同权限的代码:
在清单的“ content_scripts”下,您可以包括JavaScrit文件,该文件将包含在您正在访问的站点中。该选项提供对DOM的完全访问权限,但您仅限于与站点相同的JavaScript权限。例如,这意味着无法访问“ chrome.browsingData”。
在“ browser_action”下,设置“ default_popup”,并在用户单击扩展徽标后启动HTML。在这种情况下,权限基于清单。
在清单的“后台”下,将JS文件设置为始终在后台运行。这些JS文件具有基于清单中所请求权限的权限。
我的解决方案是将带有参数的消息从DOM(Chrome扩展程序内容脚本)发送到后台页面,以执行需要权限的操作(干净的cookie)。