iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 20
0
Modern Web

Chrome extension 學習手札系列 第 20

Chrome extension 學習手札 20 - 腳本實作 - 臺鐵時刻表查詢系統 - part 3

前言

今天,我們要來使用vue開發我們的浮動頁面(Popup page),正常狀況下會這樣使用

<body>
    <script src="./vue.min.js"></script>
    <!--other code-->
</body>

可是畫面還是不會跑出來,而且console還沒有任何的錯誤,後來上網研究了一下,

才發現是因為 Chrome Extension 的 安全性策略 - Content Security Policy (CSP) 的關係


安全性策略 - Content Security Policy (CSP)

在此簡單的介紹一下,安全性策略就是為了限制與保護擴充功能的一種機制,而默認的安全性策略為下:

script-src 'self'; object-src 'self'

會影響到的功能為:

  • 內聯的js不會執行,所以html裡的js語法一律禁止
  • eval語法禁止使用
  • src只能載入本地端檔案

而 Vue 裡面的 template 功能就是依賴eval達成高效率的編譯,所以會被阻止,於是我從偉大的GOOGLE找到了幾種解法

1.降低安全性標準

非常簡單,直接在manifest裡面加上 unsafe-eval

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

(註:官方極度不建議此做法,會提升系統被XSS攻擊的風險。)

2.使用JSX替換vue template渲染畫面

既然不能用vue template,那使用createElement就可以了吧!

沒錯!所以我們可以直接使用createElement,但這個又太難用了,所以直接用JSX來寫吧!

//disable
new Vue({
    template: ``
})

//enable
new Vue({
    render(){
        <div></div>
    }
})

(需載入其他套件編譯,ex:vue/babel-preset-jsx)

3. Vue Cli

既然我們不能在編譯時載入,那我們先編譯完再載入總可以吧!

就回到寫vue的大家們很熟悉的cli了,而 vue cli 有一個插件叫做vue-cli-plugin-chrome-ext,可以讓大家建立專案的manifest.json,而且還會分為dev以及prod的兩種版本,打包以後也會匯出manifest.json以及其他檔案,有興趣的人可以嘗試看看


因為開發時程的關係,我們就直接用第一種吧,然後把codepen裡的程式碼都匯入empty project中

解決囉!明天就讓我們來看後台腳本吧!


上一篇
Chrome extension 學習手札 19 - 腳本實作 - 臺鐵時刻表查詢系統 - part 2
下一篇
Chrome extension 學習手札 21 - 腳本實作 - 臺鐵時刻表查詢系統 - part 4
系列文
Chrome extension 學習手札30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言