The*_*der 6 javascript monkeypatching google-chrome-extension tampermonkey firefox-addon-webextensions
今天我遇到了一种情况,我需要进行扩展以对网页中的某些对象进行猴子修补。
然而,我几乎没有找到关于如何实际实现它的文档,我尝试使用该userScriptsAPI(目前仅适用于 Firefox),但该对象与页面的 HTML DOM 上的window上下文隔离。window
我知道这是可能的,因为像 GreaseMonkey 这样的用户脚本管理器实现了一个unsafeWindow对象,该对象使脚本可以直接访问网页的非隔离上下文中的对象,从而使猴子修补变得非常容易。
所以我想知道这是如何实现的。我试图研究名为ViolentMonkey的用户脚本管理器的源代码,我发现它定义unsafeWindow为src/injected/web/gm-api-wrapper.js:53对global对象的引用,但我无法找到它在源代码中定义的位置。
我知道这不是通过简单地<script>在页面中注入一个元素来实现的,因为根据我的检查,页面的 DOM 中没有可见的元素。
我对这个很酷的机制的实现很好奇,我很确定我错过了一些明显的东西,所以我需要你的帮助来摘掉我的眼罩!
小智 -1
您需要做的基本上是加载 DOM 并修改注入内容脚本的内容。
例如修改以下 HTML:
<html>
<button id="mybutton">click me</button>
<script>
var greeting = "hello, ";
var button = document.getElementById("mybutton");
button.person_name = "Bob";
button.addEventListener(
"click", () => alert(greeting + button.person_name + "."), false);
</script>
</html>
Run Code Online (Sandbox Code Playgroud)
您可以注入此代码:
var greeting = "hola, ";
var button = document.getElementById("mybutton");
button.person_name = "Roberto";
button.addEventListener(
"click", () => alert(greeting + button.person_name + "."), false);
Run Code Online (Sandbox Code Playgroud)
您可以在 Chrome 扩展程序上注入带有动态或静态声明的脚本。
以下是使用静态声明的示例 manifest.json:
{
"name": "My extension",
...
"content_scripts": [
{
"matches": ["https://*.nytimes.com/*"],
"css": ["my-styles.css"],
"js": ["content-script.js"]
}
],
...
}
Run Code Online (Sandbox Code Playgroud)
另外,您可以查看[Chrome扩展程序的文档]以获取更多信息。
| 归档时间: |
|
| 查看次数: |
416 次 |
| 最近记录: |