为什么 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.jsindex.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