Я рассматриваю возможность написания расширения Chrome на VueJS, чтобы полностью изменить внешний вид определенного сайта.
Таким образом, мне нужно динамически создать элемент, смонтировать в нем свое приложение VueJS и заменить тело страницы этим отображаемым содержимым.
Я протестировал динамическое создание контейнера на простой странице без расширения Chrome, и все отлично работает:
<html>
<body>
<script src="https://cdn.jsdelivr.net/npm/[email protected]"></script>
<script>
const app = new Vue({
data: () => ({
count: 0
}),
template: '<button v-on:click="count++">Clicked {{ count }} times</button>'
});
const body = document.getElementsByTagName('body')[0];
let vueContainer = document.createElement('div')
body.replaceWith(vueContainer);
app.$mount(vueContainer);
</script>
</body>
</html>
Это делает приложение VueJS полностью исправным.
Но затем, когда я создаю расширение Chrome и помещаю тот же код в свой файл script.js
, он фактически заменяет содержимое страницы пустой страницей. Код VueJS интерпретируется (если я добавлю console.log("something")
в метод mounted
приложения VueJS, он появится).
// script.js
const app = new Vue({
data: () => ({
count: 0
}),
template: '<button v-on:click="count++">Clicked {{ count }} times</button>'
});
const body = document.getElementsByTagName('body')[0];
let vueContainer = document.createElement('div')
body.replaceWith(vueContainer);
app.$mount(vueContainer);
// manifest.json
{
"name": "My extension",
"description": "Blah",
"version": "1.0",
"manifest_version": 3,
"content_scripts": [
{
"matches": ["https://www.mysite.fr/*"],
"js": ["[email protected]", "script.js"]
}
]
}
Это похоже на то, что расширение предотвращает отображение отображаемого контента.
На самом деле, при проверке DOM я получил подтверждение того, что мое приложение VueJS запущено: элемент div заменяется… но комментарием HTML вместо отображаемого содержимого:
<!---->
Любые идеи? Заранее спасибо!
"[email protected]"
не выглядит допустимым сценарием. Вы должны загрузить пакет vue в виде js-файла, поместить его в каталог/пакет расширения и указать фактическое правильное имя вjs
. Если со скриптом все в порядке, но просто имя странное, попробуйте все равно переименовать его в .js. - person wOxxOm   schedule 23.04.2021iframe
вместоdiv
и визуализируя Vue внутри этого iframe, пример . - person wOxxOm   schedule 23.04.2021<!---->
. Следовательно, пустая страница. Это странный… - person user650108   schedule 23.04.2021