Chrome 扩展程序权限
Chrome Extension Permissions
我一直在开发一个Chrome扩展程序,在Youtube视频页面上注入Javascript,但由于某种原因,它也在主页和其他非视频页面上注入了JS。我通读了用于构建Chrome扩展程序的Google文档,并阅读了此处的其他一些问题,并认为我对通配符(*)有很好的理解,但可能不是。
-
有了下面的权限代码片段,它不应该只在视频页面上注入 CSS/JS 由于"watch?v=*"吗?
-
有没有更好的方法来检测视频页面?
"permissions": [
"https://youtube.com/watch?v=*",
"http://youtube.com/watch?v=*"
],
"content_scripts": [
{
"matches": [
"https://youtube.com/watch?v=*",
"http://youtube.com/watch?v=*"
],
"css": [
"src/inject/inject.css"
]
},
{
"matches": [
"https://youtube.com/watch?v=*",
"http://youtube.com/watch?v=*"
],
"js": [
"src/inject/inject.js"
]
}
]
首先,让我们在清单文件中假设以下内容。此代码段相当于您在问题中发布的内容,但只是短了一点,"*://"
= http 和 https;如果通过清单文件注入内容脚本,则无需声明权限。
"content_scripts": [{
"matches": [ "*://youtube.com/watch?v=*" ],
"css": [ "src/inject/inject.css" ],
"js": [ "src/inject/inject.js" ]
}]
关于你的两个问题:
- 由于"watch?v=*",它不应该只在视频页面上注入 CSS/JS 吗?
是的,确实如此。但是,当您导航到其他页面时,YouTube 不会真正"卸载"页面。相反,将使用history.pushState
API 更新显示的 HTML 并更改 URL。因此,扩展开发人员通常会发现他们的代码"没有注入"或"运行太频繁",即使他们将内容脚本/样式限制为"watch?v="页面也是如此。
当您最初访问非观看页面(例如首页)然后点击视频时,会出现"未注入"。您可能期望脚本在视频页面上激活,因为 URL 已更改为"watch?v",但这不会发生,因为页面实际上并未重新加载。
当您从观看页面导航到非视频页面(例如首页)时,会出现"运行频率过高"。您可能期望脚本不会在主页上运行,因为 URL 与"watch?v="不匹配,但由于页面未卸载,以前的脚本仍处于活动状态。
- 有没有更好的方法来检测视频页面?
可以使用此处描述的方法来检测这些转换并适当地响应这些事件。 例如,根据当前页面是否为/watch
页面启用/禁用逻辑。这意味着您必须仔细编码,并确保正确清理 DOM 和事件。(请注意,做到这一点并不简单:只需在文档中插入一个保留引用的元素就足以防止垃圾回收器释放上面整个断开连接的 DOM 树使用的内存!
- 从应用程序脚本检查谷歌网站访问权限
- Web 驱动程序管理器更新错误:EACCES,权限被拒绝
- Chrome 扩展程序权限不起作用
- 基于Rails的javascript应用程序的安全性:如何在渲染的javascript中验证用户的权限
- 如何在React应用程序中处理权限检查(Redux中的状态维护)
- 脸书应用程序权限
- 使用 JavaScript 管理 Web 应用程序权限策略
- JavaScript 应用程序权限检查
- Chrome 扩展程序 - Notification.requestPermission() 不请求权限
- 添加 file://.对 Chrome 扩展程序的权限
- Chrome 扩展程序权限
- 如何在 JavaScript 中检查程序是否以管理员权限运行
- 授予 Chrome 扩展程序对 iframe 内容的访问权限
- 创建脸书应用程序请求以及权限
- Chrome 扩展程序内容安全政策和权限
- Chrome 扩展程序 - 请求当前标签页的可选权限
- Chrome 扩展程序清单权限
- Facebook应用程序权限错误
- 为用户提供离线HTML5 web应用程序的访问权限
- Ext应用程序不能在iframe内运行-权限被拒绝