Ian*_*ber 29 javascript google-chrome google-chrome-extension
是否可以在页面加载之前注入JS,还是需要使用内容脚本和文档完成的方式?
例如,是否有更快的方式来执行JS,一旦打开页面就会将页面变为红色?
Rob*_*b W 47
在清单文件中声明内容脚本,"run_at": "document_start"
以使其尽快运行,即在构建文档根目录之后(当时<head>
尚不存在).
对于您的特定示例,最好是声明内容样式,类似于内容脚本,但使用"css"
键而不是"js"
.
如果要尽快动态运行脚本,则chrome.tabs.executeScript
在chrome.webNavigation.onCommitted
触发事件时调用.
对于 Manifest V3,102.0.5005.58 稳定版的内容脚本中添加了一个新字段:world
还有很多与该主题相关的 chrome 错误:#634381、#1054624、#1207006
您必须"world": "main"
将内容脚本与"run_at": "document_start"
CSP 一起使用,以允许从扩展注入。否则注入的脚本会被拒绝:
拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“script-src 'self' 'wasm-unsafe-eval'”。启用内联执行需要“unsafe-inline”关键字、哈希值(“sha256-*”)或随机数(“nonce-...”)。
“世界”:“主要”:
[扩展] 为动态内容脚本添加主世界注入
此 CL 为动态内容脚本添加了一个新字段“world”,它允许扩展指定脚本是否将在隔离世界或主世界中运行。默认情况下,未指定此字段的脚本将在隔离世界中运行。
有效属性为"ISOLATED"
(默认)或"MAIN"
.
我使用的示例文件:
清单.json
{
"name": "script injection",
"version": "0",
"manifest_version": 3,
"minimum_chrome_version": "103.0",
"content_scripts": [
{
"matches": ["*://*/*"],
"js": ["inject.js"],
"run_at": "document_start",
"world": "MAIN"
}
],
"web_accessible_resources": [{
"resources": ["injected.js"],
"matches": ["<all_urls>"]
}],
"content_security_policy": {
"extension_pages": "default-src 'self' 'wasm-unsafe-eval';"
}
}
Run Code Online (Sandbox Code Playgroud)
注入.js
let el = document.createElement("script");
el.src = chrome.runtime.getURL("injected.js");
document.documentElement.appendChild(el);
console.log("injected");
Run Code Online (Sandbox Code Playgroud)
注入.js
console.log(typeof alert); // "function"
console.log("injected file");
delete window.alert;
console.log(typeof alert); // "undefined"
Run Code Online (Sandbox Code Playgroud)
[]
归档时间: |
|
查看次数: |
17933 次 |
最近记录: |