如何在 Web 扩展弹出窗口中使用 Vue.js?
How to use Vue.js in a web extension popup?
我正在尝试开发一个网络扩展并使用 Vue 来设置弹出窗口的样式,但它似乎不起作用。目前代码非常基础
manifest.json:
{
"manifest_version": 2,
"name": "Web Extension",
"description": "Web Extension",
"version": "1.0.0",
"browser_action": {
"default_icon": "icons/compass.svg",
"default_title": "Web Extension",
"default_popup": "popup/index.html"
},
"permissions": ["<all_urls>"]
}
index.html:
<!DOCTYPE html>
<html>
<head>
<title>My first Vue app</title>
<script src="https://unpkg.com/vue"></script>
</head>
<body>
<div id="app">
{{ message }}
</div>
<script>
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
</script>
</body>
</html>
从下图中可以看出,当在浏览器中打开页面时,代码可以正常工作,但是弹出窗口中的 js 似乎没有 运行:
如果你检查你的弹出窗口,你会看到错误提示浏览器由于 CSP 而拒绝加载 vue 脚本(你必须在你的清单中指定你的扩展可以访问哪些资源)
在清单中添加以下 CSP 以加载脚本:
"content_security_policy": "script-src 'self' https://unpkg.com; object-src 'self'"
脚本加载但这也不起作用: 浏览器拒绝执行内联脚本,因为它违反了 CSP。这个比较棘手,因为它与使用 eval 函数渲染模板的 vue 有关。
要解决这个问题,您将不得不在 js 中编写您的渲染函数(您不想那样做...)或编译您的模板。
有很多解决方案可以做到这一点。在我看来,使用 webpack is the easier way. You can start in a few minutes using a template like this one,这将创建与您几乎相同的扩展,(Hello World 弹出窗口)使用 vue 和 webpack(为您完成所有 webpack 配置)。安装后,使用
编译你的扩展
npm run build
并从 chrome 中的 dist 目录加载解压后的扩展。奇迹般有效。 (或者在 Firefox 中使用 web-ext cli 来 运行 它很容易)
我正在尝试开发一个网络扩展并使用 Vue 来设置弹出窗口的样式,但它似乎不起作用。目前代码非常基础
manifest.json:
{
"manifest_version": 2,
"name": "Web Extension",
"description": "Web Extension",
"version": "1.0.0",
"browser_action": {
"default_icon": "icons/compass.svg",
"default_title": "Web Extension",
"default_popup": "popup/index.html"
},
"permissions": ["<all_urls>"]
}
index.html:
<!DOCTYPE html>
<html>
<head>
<title>My first Vue app</title>
<script src="https://unpkg.com/vue"></script>
</head>
<body>
<div id="app">
{{ message }}
</div>
<script>
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
</script>
</body>
</html>
从下图中可以看出,当在浏览器中打开页面时,代码可以正常工作,但是弹出窗口中的 js 似乎没有 运行:
如果你检查你的弹出窗口,你会看到错误提示浏览器由于 CSP 而拒绝加载 vue 脚本(你必须在你的清单中指定你的扩展可以访问哪些资源) 在清单中添加以下 CSP 以加载脚本:
"content_security_policy": "script-src 'self' https://unpkg.com; object-src 'self'"
脚本加载但这也不起作用: 浏览器拒绝执行内联脚本,因为它违反了 CSP。这个比较棘手,因为它与使用 eval 函数渲染模板的 vue 有关。 要解决这个问题,您将不得不在 js 中编写您的渲染函数(您不想那样做...)或编译您的模板。 有很多解决方案可以做到这一点。在我看来,使用 webpack is the easier way. You can start in a few minutes using a template like this one,这将创建与您几乎相同的扩展,(Hello World 弹出窗口)使用 vue 和 webpack(为您完成所有 webpack 配置)。安装后,使用
编译你的扩展npm run build
并从 chrome 中的 dist 目录加载解压后的扩展。奇迹般有效。 (或者在 Firefox 中使用 web-ext cli 来 运行 它很容易)