javascript - 通过内容脚本在 XML 文件中注入(inject) javascript

标签 javascript xml google-chrome-extension firefox-addon firefox-addon-webextensions

我知道 xml 中不应该包含 javascript,但我正在制作一个浏览器扩展,需要在每个页面上注入(inject)一些代码,以便为用户提供一些有趣的统计信息。

问题是,我无法让注入(inject)的代码在 XML 文档中运行,因为它看起来像我创建的脚本标记被视为文本?

相同的代码在 HTML 中运行良好

这是我所拥有的:

ma​​nifest.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

因此注入(inject)的代码被视为文本。无论如何?否则故意将 javascript 添加到 xml 会导致其绕过扩展

最佳答案

只需使用 XML 兼容的命名空间创建脚本 DOM 元素即可:

let script = document.createElementNS('http://www.w3.org/1999/xhtml', 'script');

关于javascript - 通过内容脚本在 XML 文件中注入(inject) javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53247884/

相关文章:

php - 在 xPath 中选择子项

jquery - 能否使用 jQuery 的 $(responseXML) 语法可靠地解析 XML?

python - 即使在使用 strip_cdata=False 后 CDATA 在 lxml 中被剥离

javascript - 交换 Chrome 中所选选项卡内容中的一些单词

javascript - 有人使用 yui logger 来跟踪 yui 事件吗?有没有办法过滤它?

javascript - 如何从 block 中的代码生成 block ?

javascript - 鹅毛笔 : How to add links to the editor content that don't get saved to the delta?

javascript - 如何动态地向对象添加数组?

javascript - 编写第一个 Chrome 扩展程序并尝试根据所选文本执行操作

javascript - Jasmine spy 返回空的mostRecentCall 对象