我正在将功能正常的浏览器扩展迁移到清单 v3。问题:我希望仅在单击浏览器扩展图标时加载内容脚本。但是,脚本始终会加载。当我尝试上传到 chrome 商店时,我收到以下消息,这是我想避免的:
由于主机权限的原因,您的扩展程序可能需要深入审查,这将延迟发布。
我怀疑这与“行动”有关,但我不知道如何解决这个问题。这是清单:
{
"manifest_version": 3,
"name": "__MSG_extName__",
"description": "__MSG_extDescription__",
"key": "...",
"version": "1.0.0",
"icons": { ... },
"background": {
"service_worker": "/background.js"
},
"permissions": [
"storage"
],
"content_scripts": [
{
"matches": [
"<all_urls>"
],
"js": [
"/content.js"
]
}
],
"web_accessible_resources": [
{
"resources": [
"/assets/*",
"/options.html"
],
"matches": [
"<all_urls>"
]
}
],
"options_page": "options.html",
"action": {}
}
Run Code Online (Sandbox Code Playgroud)
最后一点:我认为我需要activeTab
许可。但同样,我的问题是我想最小化所需的权限。
提前致谢!
我正在尝试将消息从后台脚本发送到我的 chrome 扩展中的内容脚本。但看起来消息是在加载内容脚本之前发送的?
这是我正常使用扩展程序时遇到的错误:
Uncaught (in promise) Error: Could not establish connection. Receiving end does not exist.
Run Code Online (Sandbox Code Playgroud)
这是我的后台脚本,其tabs.onUpdated
功能为:
chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
if (changeInfo.url) {
console.log(changeInfo.url, tabId)
chrome.tabs.sendMessage(tabId, {
url: changeInfo.url,
type: 'URL_CHANGE'
});
}
});
Run Code Online (Sandbox Code Playgroud)
这是我的内容脚本接收函数:
chrome.runtime.onMessage.addListener((obj, sender, response) => {
console.log('received', obj)
if (obj.type === 'URL_CHANGE') {
console.log('testestsetst')
getAuth()
getUrlType(obj.url)
} else if (obj.type === 'AUTH') {
getAuth()
} else if (obj.type === 'UN-AUTH') {
removeAuth()
}
});
Run Code Online (Sandbox Code Playgroud)
每当我正常运行扩展时,我都看不到内容脚本的输出,并且收到如上所述的错误。但是,当我调试后台脚本并单步执行代码时,我没有收到错误,并且我的内容脚本正确打印了所有内容。这可能是由于页面需要加载造成的吗?如果是这样,我该如何解决这个问题?
google-chrome-extension content-script service-worker chrome-extension-manifest-v3
使用 Manifest v3 Chrome 扩展程序,是否可以将扩展程序 HTML 资源文件加载到新选项卡中?我正在考虑提供一个比弹出面板所能提供的更大、全页面用户体验的插件。我创建了一个 page.html(目前只是简单的 HTML,没有 JS 或 CSS)并将其放入我的扩展文件夹中。然后我将其添加到manifest.json:
"web_accessible_resources": [
{
"resources": ["page.html"],
"matches": [ "*://*/*" ]
}
]
Run Code Online (Sandbox Code Playgroud)
我重新加载了插件,然后尝试使用以下命令在浏览器中导航到此页面:
chrome://extensions/MY-EXTENSION-ID-GOES-HERE/page.html
我收到 ERR_FAILED 和“无法访问此站点”消息。
我正在编写一个 chrome 扩展程序,我基本上希望当它处于活动状态时,屏幕上显示一个小圆圈。我需要 CSS,所以我想做的是在我的清单中添加背景,并且基本上只在单击图标时执行内容脚本。目前我知道如果选项卡 URL 更改,该设置就会打开,但我正在测试一些东西。我需要将 CSS 添加到我的内容脚本中,但不知道如何添加。我查了一下,发现 insertCSS() 是一个东西,但这只是一行代码,我有更多的东西。有什么想法吗?我已经审阅了它的主要 google 文档以及 MDN。任何帮助,将不胜感激。
//BACKGROUND
try {
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
if(changeInfo.status == 'complete') {
chrome.scripting.executeScript({
files: ['content-script.js'],
target: {tabId: tab.id}
});
}
});
} catch (e) {
console.log(e);
}
//CONTENT-SCRIPT (in another file, wasn't sure how to add it to the question
if (typeof init === 'undefined') {
const init = function() {
const injectElement = document.createElement("button");
injectElement.className = 'button_attempt';
injectElement.innerHTML = "T";
document.body.appendChild(injectElement);
}
init();
}
Run Code Online (Sandbox Code Playgroud)
//CSS
@import url('https://fonts.googleapis.com/css2?family=Prociono&family=Sorts+Mill+Goudy&display=swap'); …
Run Code Online (Sandbox Code Playgroud)javascript css scripting google-chrome-extension chrome-extension-manifest-v3
我有一个 chrome MV3 扩展,它具有以下 manifest.json:
{
"manifest_version": 3,
"permissions": [
"scripting",
"tabs"
],
"host_permissions": ["<all_urls>"]
}
Run Code Online (Sandbox Code Playgroud)
当我安装扩展并具有现有选项卡时,我无法在这些现有选项卡上执行脚本:
chrome.scripting.executeScript({
target: {tabId: 1305686273},
func: function(){ console.log('hi'); }
});
Run Code Online (Sandbox Code Playgroud)
我在后台服务工作线程脚本中收到此错误:
无法访问页面内容。扩展清单必须请求访问相应主机的权限。
我的理解是,该tabs
权限允许我在没有用户手势的情况下查询所有选项卡,并且"host_permissions": ["<all_urls>"]
应该允许我在没有用户手势的情况下在所有选项卡上执行脚本。
我是否错了,或者是否缺少某些内容来允许在没有用户手势的情况下在页面上编写脚本?
PS 运行chrome.tabs.get(1305686273).then(console.log)
效果符合预期。
我正在制作一个 chrome 扩展,其中有一个 iframe。当扩展程序请求服务器以获取页面时,它会返回错误Refused to display 'https://subdomain.example.com/' in a frame because it set 'X-Frame-Options' to 'deny'
。尽管我已在我的文件中设置了x-frame-options
to并在后端项目的特定方法中添加了 a ,但它返回了另一个错误。我在我的文件中添加了和。不走运,它返回了,所以我删除了权限并添加了v3 的权限。没有结果!!然后我添加了deny
.htaccess
header('x-frame-options: GOFORIT')
Refused to display 'https://subdomain.example.com/' in a frame because it set multiple 'X-Frame-Options' headers with conflicting values ('GOFORIT, DENY'). Falling back to 'deny'
webRequest
webRequestBlocking
permissions
manifest.json
'webRequestBlocking' requires manifest version of 2 or lower
Unchecked runtime.lastError: You do not have permission to use blocking webRequest listeners. Be sure to declare the webRequestBlocking permission …
javascript google-chrome google-chrome-extension x-frame-options chrome-extension-manifest-v3
我正在开发清单版本 3,并陷入了通过 chrome 扩展中请求的 API 获取响应正文的无尽漏洞。
目标是获得所有请求的 API 响应
清单.json
{
"name": "Chapter 28 (MV3)",
"version": "1.0",
"manifest_version": 3,
"description": "This is Chapter 28",
"declarative_net_request" : {
"rule_resources" : [{
"id": "ruleset_1",
"enabled": true,
"path": "rules_1.json"
}]
},
"permissions": [
"declarativeNetRequest",
"declarativeNetRequestFeedback"
],
"background": {
"service_worker": "background.js"
}
}
Run Code Online (Sandbox Code Playgroud)
规则_1.json
[
{
"id": 1,
"priority": 1,
"action": {
"type": "block"
},
"condition": {
"urlFilter": "yahoo.co.jp",
"resourceTypes": ["main_frame"]
}
},
{
"id": 2,
"priority": 1,
"action": {
"type": "allow"
}, …
Run Code Online (Sandbox Code Playgroud) javascript google-chrome-extension chrome-extension-manifest-v3 chrome-declarativenetrequest
chrome-extension-manifest-v3 ×7
javascript ×3
chrome-declarativenetrequest ×1
css ×1
scripting ×1