Chrome扩展程序:webNavigation,同时限制权限范围

时间:2018-11-11 20:01:50

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

我有一个Chrome扩展程序,可以监视某些网站上网址中的额外查询参数。我正在向新网站添加功能,而我遇到的问题是该网站重定向到另一个URL,并在加载内容脚本之前删除了我的自定义查询。

通过在后台脚本中使用webNavigation API并为chrome.webNavigation.onCommitted添加侦听器,看来我可以解决此问题。问题是,通过在清单中添加webNavigation权限,我现在正在寻求“读取浏览历史记录”的权限。我已经花了很多时间试图将扩展权限的范围限制到某些站点,而且我真的不想向用户要求像这样的纯白权限。

我在SO上发现了另外两个有关此问题的线程,但是in one,用户发现了一种我认为不适用于我的解决方法(尽管如果有人提出了建议的解决方法,我会other suggests,并且{{3}}会通过在侦听器声明中添加过滤器来限制权限请求。该答案未被接受为正确答案,实际上,无论是否具有过滤器,我都没有看到任何权限差异。

是否完全无法实现我想做的事并且还限制权限警告的范围?还是我错过了什么?谢谢。

我的webNavigation侦听器声明:

chrome.webNavigation.onCommitted.addListener(function(e) {
    //Can dig out my query parameter from e
    console.log(e);
},{
    url: [{hostContains: "[NAME OF HOST]"}]
});

1 个答案:

答案 0 :(得分:2)

我能够找出适合我情况的解决方法。我认为这并不适合所有人,但是使用webRequest API可以让我在重定向之前拦截页面加载请求,并存储查询字符串以备后用。除了我通过manifest.json文件中的content-script> matches数组已经要求的权限之外,webRequest API并没有要求任何权限,这导致Chrome要求“在数字上读取和更改您的数据”网站”,然后列出这些网站。

chrome.webRequest.onBeforeRequest.addListener(
    function(details) {

        //details.url contains my query string 
        var url = details.url;
        return;
    }, {
        urls: ['*://*.mysite.com/*'],
        types: ['main_frame'] //Filters out all the js,css,ajax,etc requests
    }
);