Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome扩展:限制权限范围的webNavigation_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript Chrome扩展:限制权限范围的webNavigation

Javascript Chrome扩展:限制权限范围的webNavigation,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我有一个Chrome扩展,可以在某些站点的url中监视额外的查询参数。我正在向一个新网站添加功能,我遇到的问题是,该网站会重定向到不同的url,并在加载内容脚本之前删除我的自定义查询 看起来我可以通过在后台脚本中使用并为chrome.webNavigation.onCommitted添加一个侦听器来解决这个问题。问题是,通过将webNavigation权限添加到我的清单中,我现在正在请求“读取您的浏览历史记录”的权限。我花了很多时间试图将扩展权限的范围限制到某些站点,我真的不想像这样向用户请求全

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

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

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

难道我不可能实现我想做的事情,也不可能限制权限警告的范围吗?还是我遗漏了什么?谢谢

My webNavigation侦听器声明:

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

我找到了解决我的情况的办法。我不认为这对每个人都有效,但是使用允许我在重定向之前拦截页面加载请求,并存储查询字符串以备将来使用。WebRequestAPI也没有要求任何超出我已经通过manifest.json文件中的content script>matches数组要求的权限,这导致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
    }
);

我找到了解决我的情况的办法。我不认为这对每个人都有效,但是使用允许我在重定向之前拦截页面加载请求,并存储查询字符串以备将来使用。WebRequestAPI也没有要求任何超出我已经通过manifest.json文件中的content script>matches数组要求的权限,这导致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
    }
);

使用。谢谢。我认为这不一定能解决问题。当你要求获得城堡的钥匙许可时,它只是把罐子踢到了路上。找到了一个解决方法,请参见下文,在我的情况下,该方法正好有效,但不会普遍适用。我以前没有webRequest权限,但在添加该权限时,Chrome没有要求额外的权限。在添加webRequest之前和之后,Chrome请求的权限是“读取和更改多个网站上的数据”。然后它列出了几个网站,我在manifest.json中的content script>matches数组中列出了这些网站。我需要在这些网站上运行contentscript,这样权限范围才有意义。在看到您的解决方案之前,我已经找到了webRequest的解决方案,因此我没有使用可选权限,但是查看文档,似乎可选权限仍然要求太多,即使您限制了其范围。文档说明,请求
权限:['tabs']的可选权限,来源:['tabs']http://www.google.com/“]
将要求用户“访问www.google.com上的数据”和“访问选项卡和浏览活动”。即使您限制了范围,它似乎仍然在要求一切。很抱歉给你带来困惑。我不知道webRequest没有添加自己的许可通知。你能把这些信息加到你的答案里吗?我认为这是至关重要的。我的意思是重新措辞,让它更清晰。使用。谢谢。我认为这不一定能解决问题。当你要求获得城堡的钥匙许可时,它只是把罐子踢到了路上。找到了一个解决方法,请参见下文,在我的情况下,该方法正好有效,但不会普遍适用。我以前没有webRequest权限,但在添加该权限时,Chrome没有要求额外的权限。在添加webRequest之前和之后,Chrome请求的权限是“读取和更改多个网站上的数据”。然后它列出了几个网站,我在manifest.json中的content script>matches数组中列出了这些网站。我需要在这些网站上运行contentscript,这样权限范围才有意义。在看到您的解决方案之前,我已经找到了webRequest的解决方案,因此我没有使用可选权限,但是查看文档,似乎可选权限仍然要求太多,即使您限制了其范围。文档说明,请求
权限:['tabs']的可选权限,来源:['tabs']http://www.google.com/“]
将要求用户“访问www.google.com上的数据”和“访问选项卡和浏览活动”。即使您限制了范围,它似乎仍然在要求一切。很抱歉给你带来困惑。我不知道webRequest没有添加自己的许可通知。你能把这些信息加到你的答案里吗?我认为这是至关重要的。我的意思是重新措辞,让它更清楚。