为什么 Vue.js 实例在 Firefox 扩展开发中不起作用?
Why Vue.js instance doesn't work in Firefox Extension Development?
Manifest.json:
{
"manifest_version": 2,
"name": "Vue",
"version": "1.0",
"description": "Vue Test",
"icons": {
"96": "icons/icon.png"
},
"permissions": [
"tabs"
],
"background": {
"scripts": ["background.js"]
},
"browser_action": {
"default_icon": "icons/icon.png",
"default_title": "Vue"
}
}
background.js:
browser.browserAction.onClicked.addListener(()=>{
browser.tabs.create({url: 'index.html'})
.then(()=>browser.tabs.executeScript({file: "index.js"}))
.then(()=>browser.tabs.executeScript({file: "vue.js"}))
})
index.html:
<!DOCTYPE html>
<html>
<head>
<title>Vue</title>
<meta charset="UTF-8">
<link rel="stylesheet" href="index.css"/>
</head>
<body>
<div id="app">{{msg}}</div>
<script src="vue.js"></script>
<script src="index.js"></script>
</body>
</html>
vue.js: vue.js本身是从vue页面下载的
index.js:
let app = new Vue({
el: '#app',
data: {
msg: 'hi'
}
})
问题:屏幕上没有呈现任何内容。如果我得到相同的 index.html 并直接在浏览器上打开它,它将呈现消息 'hi'。我错过了什么?
首先,vue.js
和 index.js
不需要在 index.html
文件中再次导入,因为它已经是 background.js
中的 injected/executed。
其次,在background.js
中,vue.js
应该先执行(以便VueJS准备好稍后初始化主应用程序),我们实际上应该等到它执行完再继续index.js
.
所以,总而言之,background.js
应该是这样的:
browser.browserAction.onClicked.addListener(async ()=>{
await browser.tabs.create({url: 'index.html'});
await browser.tabs.executeScript({file: "vue.js"});
await browser.tabs.executeScript({file: "index.js"});
});
并删除
<script src="vue.js"></script>
<script src="index.js"></script>
来自 index.html
Manifest.json:
{
"manifest_version": 2,
"name": "Vue",
"version": "1.0",
"description": "Vue Test",
"icons": {
"96": "icons/icon.png"
},
"permissions": [
"tabs"
],
"background": {
"scripts": ["background.js"]
},
"browser_action": {
"default_icon": "icons/icon.png",
"default_title": "Vue"
}
}
background.js:
browser.browserAction.onClicked.addListener(()=>{
browser.tabs.create({url: 'index.html'})
.then(()=>browser.tabs.executeScript({file: "index.js"}))
.then(()=>browser.tabs.executeScript({file: "vue.js"}))
})
index.html:
<!DOCTYPE html>
<html>
<head>
<title>Vue</title>
<meta charset="UTF-8">
<link rel="stylesheet" href="index.css"/>
</head>
<body>
<div id="app">{{msg}}</div>
<script src="vue.js"></script>
<script src="index.js"></script>
</body>
</html>
vue.js: vue.js本身是从vue页面下载的
index.js:
let app = new Vue({
el: '#app',
data: {
msg: 'hi'
}
})
问题:屏幕上没有呈现任何内容。如果我得到相同的 index.html 并直接在浏览器上打开它,它将呈现消息 'hi'。我错过了什么?
首先,vue.js
和 index.js
不需要在 index.html
文件中再次导入,因为它已经是 background.js
中的 injected/executed。
其次,在background.js
中,vue.js
应该先执行(以便VueJS准备好稍后初始化主应用程序),我们实际上应该等到它执行完再继续index.js
.
所以,总而言之,background.js
应该是这样的:
browser.browserAction.onClicked.addListener(async ()=>{
await browser.tabs.create({url: 'index.html'});
await browser.tabs.executeScript({file: "vue.js"});
await browser.tabs.executeScript({file: "index.js"});
});
并删除
<script src="vue.js"></script>
<script src="index.js"></script>
来自 index.html