通过内容脚本在 XML 文件中注入 javascript
Inject javascript in XML file via content script
我知道 xml 不应该真正包含 javascript,但我正在制作一个浏览器扩展,需要在每个页面上注入一些代码,以便为用户提供一些有趣的统计数据。
问题是,我无法将注入的代码获取到 XML 文档中的 运行,因为看起来我创建的脚本标签被视为文本?
相同的代码在 HTML
中工作正常
这是我的:
manifest.json:
"content_scripts": [
{
"matches": ["<all_urls>"],
"all_frames": true,
"match_about_blank": true,
"run_at": "document_start",
"js": ["scripts/content/countCalls.js"]
}
]
countCalls.js:
let injectedCode = 'console.log("Hello from injected code");';
let script = document.createElement('script');
script.appendChild(document.createTextNode(injectedCode));
let parent = document.head || document.body || document.documentElement;
let firstChild = (parent.childNodes && (parent.childNodes.length > 0)) ? parent.childNodes[0] : null;
if (firstChild) {
parent.insertBefore(script, firstChild);
} else {
parent.appendChild(script);
}
test.xml:
<?xml version="1.0"?>
<main xmlns='http://www.w3.org/1999/xhtml'>
<script>
console.log("Hello from XML");
</script>
</main>
当我在浏览器中加载 test.xml
时,我看到了这个:
console.log("Hello from injected code");
在控制台中我只看到了这个:
Hello from XML
所以注入的代码被当作文本对待。无论如何围绕这个?否则故意将 javascript 添加到 xml 将导致它绕过扩展
只需创建具有 XML 兼容命名空间的脚本 DOM 元素:
let script = document.createElementNS('http://www.w3.org/1999/xhtml', 'script');
我知道 xml 不应该真正包含 javascript,但我正在制作一个浏览器扩展,需要在每个页面上注入一些代码,以便为用户提供一些有趣的统计数据。
问题是,我无法将注入的代码获取到 XML 文档中的 运行,因为看起来我创建的脚本标签被视为文本?
相同的代码在 HTML
中工作正常这是我的:
manifest.json:
"content_scripts": [
{
"matches": ["<all_urls>"],
"all_frames": true,
"match_about_blank": true,
"run_at": "document_start",
"js": ["scripts/content/countCalls.js"]
}
]
countCalls.js:
let injectedCode = 'console.log("Hello from injected code");';
let script = document.createElement('script');
script.appendChild(document.createTextNode(injectedCode));
let parent = document.head || document.body || document.documentElement;
let firstChild = (parent.childNodes && (parent.childNodes.length > 0)) ? parent.childNodes[0] : null;
if (firstChild) {
parent.insertBefore(script, firstChild);
} else {
parent.appendChild(script);
}
test.xml:
<?xml version="1.0"?>
<main xmlns='http://www.w3.org/1999/xhtml'>
<script>
console.log("Hello from XML");
</script>
</main>
当我在浏览器中加载 test.xml
时,我看到了这个:
console.log("Hello from injected code");
在控制台中我只看到了这个:
Hello from XML
所以注入的代码被当作文本对待。无论如何围绕这个?否则故意将 javascript 添加到 xml 将导致它绕过扩展
只需创建具有 XML 兼容命名空间的脚本 DOM 元素:
let script = document.createElementNS('http://www.w3.org/1999/xhtml', 'script');