gpt4 book ai didi

javascript - Vuejs 应用程序未在 Chrome 扩展中呈现

转载 作者:行者123 更新时间:2023-12-01 01:20:33 25 4
gpt4 key购买 nike

我正在尝试在 Chrome 扩展中运行示例 Vuejs 应用程序作为新选项卡(即,当您打开新选项卡时,Vuejs 应用程序应该呈现)。当我从 dist/ 运行应用程序时文件夹使用 simplehttpserver dist/它按预期工作得很好,但是,当我Load Unpacked时将 dist 文件夹作为 Chrome 扩展并尝试打开新选项卡,Vuejs 应用程序不会呈现。

我正在运行npm run build构建应用程序,然后添加 manifest.jsonbackground.js文件进入dist/文件夹。

我在 chrome 扩展版本的元素检查器中看到的一件事是 <div id="app"></div>由于某种原因不包含在 DOM 中,即使它位于 index.html 中构建完成后的文件。

注意:我尝试用作 Chrome 扩展的 Vuejs 应用程序是默认示例应用程序 vue init webpack .创建。

ma​​nifest.json

{
"manifest_version": 2,
"name": "Vuejs test extension",
"description": "",
"version": "0.0.0",

"chrome_url_overrides": {
"newtab": "index.html"
},

"browser_action": {
"default_icon": "icon.png"
},

"permissions": [
"tabs"
],

"background": {
"scripts": ["background.js"],
"persistent": false
}
}

背景.js

chrome.browserAction.onClicked.addListener((function() {
chrome.tabs.create({'url': "chrome://newtab"})
}));

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Test vuejs app</title>
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>

最佳答案

我找到了一个简单快速的解决方法。

正如许多人指出的那样,整个问题在于运行时的 vue 渲染模板。为此,它使用了 eval() 函数,出于安全原因,默认情况下 Chrome 浏览器不允许使用该函数。

您可以通过在 manifest.json 中添加以下行来绕过此问题:

"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"

这显然是不建议的,因为您的扩展很容易出现跨站点脚本漏洞。

相反,您可以依靠 vue 在编译时渲染模板。这样它就不再需要在模板上运行 eval()

在编译时渲染模板的最简单方法是在使用 vue init webpack 创建项目时将 Vue build 设置为 runtime

这迫使 Vue 根据本文使用预编译模板:https://vuejsdevelopers.com/2017/05/08/vue-js-chrome-extension/

...这正是我们需要不使用 eval() 函数的原因。

关于javascript - Vuejs 应用程序未在 Chrome 扩展中呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54271531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com