javascript - 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]"}]
});
解决方案
我能够为我的情况找到一种解决方法。我不认为这对每个人都有效,但是使用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
}
);
推荐阅读
- swiftui - 如何根据来自 ObservableObject 的 @Published 数组可靠地更新 SwiftUI 中的字符串?
- python - Django Hosted on Apache: Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding Python runtime state:
- node.js - Express & MongoDB:在时间戳创建的重复文档
- blockchain - 我正在使用 Polkadot js api 进行交易,但我无法获取交易完成或失败的事件
- python - 使用 JinjaSql 在 bin_params 中更改参数名称
- javascript - 在 safari 上搜索后 HTML 音频暂停
- excel - 如何根据行值动态排序列
- microsoft-graph-api - 无法运行 Graph 教程
- android - 有没有办法限制 Android 上 Google Chrome 的最大滚动速度?
- algorithm - 如何在 Floyd-Warshal 算法中找到最短路径和最短成本