[英]Vuejs app not rendering in a chrome extension
我正在嘗試在chrome擴展程序中作為新選項卡運行示例Vuejs應用程序(即,當您打開新選項卡時,Vuejs應用程序應呈現)。 當我使用simplehttpserver dist/
從dist/
文件夾運行應用程序時,它按預期運行,但是,當我將dist文件夾作為Chrome擴展程序Load Unpacked
解壓縮並嘗試打開新標簽時,Vuejs應用程序不會呈現。
我正在運行npm run build
來構建應用程序,然后將manifest.json
和background.js
文件添加到dist/
文件夾中。
我在chrome擴展版本的元素檢查器中看到的一件事是,由於某些原因, <div id="app"></div>
未包含在DOM中,即使它在之后的index.html
文件中也是如此。構建完成。
注意:我嘗試用作chrome擴展程序的Vuejs應用程序是默認示例應用程序vue init webpack .
創建。
的manifest.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
}
}
background.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不允許使用eval()
函數。
您可以通過在manifest.json
添加以下行來繞過此操作:
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
顯然不建議這樣做,因為您的擴展程序很容易出現跨站點腳本漏洞。
相反,您可以依靠vue在編譯時渲染模板。 這樣,它不再需要在模板上運行eval()
。
在編譯時呈現模板的最簡單方法是在使用vue init webpack
創建項目runtime
將Vue build
設置為runtime
時。
這迫使Vue根據本文使用預編譯的模板: https : //vuejsdevelopers.com/2017/05/08/vue-js-chrome-extension/
...正是我們不需要使用eval()
函數的原因。
要使用Vuejs創建chrome-extension,您可以使用此樣板。 確保已安裝vue-cli(如果尚未安裝),可以使用`npm install -g @ vue / cli安裝它。
安裝vue-cli后,運行以下cmd: vue init kocal/vue-web-extension my-extension
。 它將下載chrome-extension的vuejs樣板模板並將其安裝到當前目錄。 然后,您可以移動到新創建的目錄並使用命令npm install
依賴項。
現在,您已經完全為chrome-extension設置了vuejs應用程序,但是它將作為彈出窗口打開,以使其在新選項卡中可見,這將需要一些修改,如下所示。
src/manifest.json
文件,然后從"browser_action"
刪除"default_popup": "popup/popup.html"
"browser_action"
然后轉到src/background.js
文件並刪除所有給定的代碼,並將其替換為下面給出的代碼。
chrome.browserAction.onClicked.addListener(function (tab) { chrome.tabs.create( { url: chrome.extension.getURL('./popup/popup.html'), }, function (tab) { } ); });
現在運行run npm run build
,它將生成dist文件夾,您可以將其用作擴展文件夾。 您可以通過使用chrome擴展程序菜單中的Load unpacked
選項在chrome中Load unpacked
。
完成后,您可以通過單擊擴展圖標查看vuejs應用程序在新選項卡窗口中運行。
讓我知道它是否有效,如果無效,請讓我知道您面臨的問題是什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.