首页 > 解决方案 > Chrome 扩展:webNavigation 同时限制权限范围

问题描述

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

看起来我可以通过在后台脚本中使用webNavigation API并为 chrome.webNavigation.onCommitted 添加一个侦听器来解决这个问题。问题是通过将 webNavigation 权限添加到我的清单中,我现在正在请求“阅读您的浏览历史记录”的权限。我花了很多时间试图将我的扩展权限范围限制在某些网站上,我真的不想像这样要求用户全权委托。

我在 SO 上找到了关于此问题的另外两个线程,但在一个中,用户找到了一种我认为不适用于我的情况的解决方法(尽管如果有人有建议的解决方法,我会全力以赴),并且另一个建议通过在侦听器声明中添加过滤器,它将限制权限请求。该答案未被认为是正确的,事实上,无论我是否有过滤器,我都没有看到任何权限差异。

是否根本不可能实现我想做的事情并限制权限警告的范围?还是我错过了什么?谢谢。

我的 webNavigation 监听器声明:

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

标签: javascriptgoogle-chromegoogle-chrome-extension

解决方案


我能够为我的情况找到一种解决方法。我不认为这对每个人都有效,但是使用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
    }
);

推荐阅读