Я знаю, что в 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 («Привет из введенного кода»);
и в консоли я просто вижу это:
Привет из XML
Таким образом, введенный код обрабатывается как текст. В любом случае вокруг этого? В противном случае намеренное добавление javascript в xml приведет к обходу расширения