gpt4 book ai didi

javascript - Chrome 拒绝内容脚本注入(inject)的 权限

转载 作者:行者123 更新时间:2023-12-03 06:56:04 41 4
gpt4 key购买 nike

我不确定这是一个错误,还是我的 list 文件配置错误,但 <all_urls>权限不适用于内容脚本注入(inject)。这是一个导致错误的简单示例

manifest.json:

{
"manifest_version": 2,
"name": "Bug?",
"version": "1",
"description": "This seems to be a bug",
"minimum_chrome_version": "50",
"background": {
"scripts": ["background.js"],
"persistent": false
},
"permissions": [
"<all_urls>",
"tabs",
"webNavigation"
]
}

背景.js:

chrome.webNavigation.onBeforeNavigate.addListener(info => {
chrome.tabs.executeScript(info.tabId, {
frameId: info.frameId,
code: 'console.log("works")',
runAt: 'document_start'
}, () => {
if(chrome.runtime.lastError)
console.error(chrome.runtime.lastError.message)
})
})

我的目标

我希望我的内容脚本在浏览器处理页面及其所有子框架中的任何 html 之前运行。我知道我可以在 list 文件中指定我的内容脚本。然而,这并不让我选择为根框架和子框架运行不同的内容脚本。因此,上面的代码是我的最终代码的一个很好的玩具示例。

实际发生的情况

对于每个帧,内容脚本无法执行,并出现以下错误:

Cannot access contents of url "<some url>". Extension manifest must request permission to access this host.

什么?... <all_urls>并不意味着所有网址?

是什么让它发挥作用?

如果我改变chrome.webNavigation.onBeforeNavigatechrome.webNavigation.onCommitted ,注入(inject)按预期工作(about:blank 页面除外,该页面可以轻松修复)。但是,这并不能保证我的内容脚本在处理任何 html 之前运行。

有什么想法吗?

最佳答案

您在这里遇到了严重的时间问题。

如果您尝试在 onCommissed 发生之前注入(inject),您实际上是在尝试注入(inject)文档,因为它没有改变还没有。

这是一个有根据的猜测,但是当您对旧 URL 的权限进行评估时,可能会发生竞争条件,但到注入(inject)实际发生时,导航已生效,并且原点现在是不同。

webNavigation/tabs 事件相关的 run_at: "document_start" 安排时机不佳。仅当您在 list (或 declarativeContent API 的仍处于实验阶段的内容脚本操作)中指定它时,它才能有效地按照您的预期运行。

现在,谈谈你的问题:

This doesn't, however, let me choose to run a different content script for root and subframes.

这根本不是真的。您可以分支您的逻辑 depending on your position in the iframe hierarchy :

if (window.parent != window) {
// Subframe
} else {
// Main frame
}

因此,您应该依赖 "document_start" 脚本的 list 注入(inject),并且可以同步为子帧实现不同的逻辑。

关于javascript - Chrome 拒绝内容脚本注入(inject)的 <all_urls> 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37276543/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com