即使添加了权限,chrome.history和chrome.browsingData仍未定义

时间:2018-10-15 19:16:57

标签: javascript google-chrome google-chrome-extension

我正在尝试构建一个简单的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

2 个答案:

答案 0 :(得分:0)

我终于解决了这个问题。问题在于chrome正在重新加载清单中除权限之外的所有部分,因此该值显示为未定义。只需删除扩展名,然后再加载解压缩的扩展名即可解决此问题。

谢谢。

答案 1 :(得分:0)

我有一个类似的问题,即使清单中的权限正确,也未定义“ chrome.browsingData”。 我花了一些时间才了解,有3种方法可以在Chrome扩展程序中编写具有不同权限的代码:

  1. 内容

在清单的“ content_scripts”下,您可以包括JavaScrit文件,该文件将包含在您正在访问的站点中。该选项提供对DOM的完全访问权限,但您仅限于与站点相同的JavaScript权限。例如,这意味着无法访问“ chrome.browsingData”。

  1. 弹出

在“ browser_action”下,设置“ default_popup”,并在用户单击扩展徽标后启动HTML。在这种情况下,权限基于清单。

  1. 背景

在清单的“后台”下,将JS文件设置为始终在后台运行。这些JS文件具有基于清单中所请求权限的权限。

我的解决方案是将带有参数的消息从DOM(Chrome扩展程序内容脚本)发送到后台页面,以执行需要权限的操作(干净的cookie)。