# 專案目標與成品行為
* 用純 HTML(HTML)與 CSS(CSS)做一個「快速啟動器」Chrome 擴充功能(Chrome extension)
* 點擊工具列圖示後開啟 Popup(Popup),裡面是一排社群/網站連結
* 點擊連結會在新分頁開啟(target="_blank")
* 用途偏新手入門:理解專案結構、manifest 設定、如何載入本地擴充功能、如何上架流程概念
# 專案資料夾與圖示資產規劃
* 建立專案資料夾(例如 traversee-launcher)
* 準備工具列用主圖示 icon.png(icon.png),尺寸 19×19
* 準備商店/擴充功能用大圖示 icon_128.png(icon_128.png),尺寸 128×128
* 另建 images(images)資料夾放 Popup 內顯示的 logo 圖(例如 traversee-logo.png),示範尺寸約 150×150
* 主圖示放在根目錄是因為它屬於擴充功能本體資源,Popup 內 logo 則放 images 便於管理
# manifest.json(Manifest V2)重點欄位
* manifest_version(manifest_version)使用 2(Manifest V2),並提醒不同時期可能需要查官方文件版本差異
* name(name)設定擴充功能名稱(例如 Traverse Launcher)
* description(description)設定簡短描述
* version(version)設定版本號(例如 1.0.0)
* icons(icons)指定 128px 圖示路徑(icon_128.png)
* browser_action(browser_action)用來定義工具列行為與 Popup
* browser_action.default_icon(default_icon)指定工具列 19px 圖示(icon.png)
* browser_action.default_popup(default_popup)指定 Popup HTML(popup.html)
* permissions(permissions)宣告權限,示範只用 activeTab(activeTab)
# 檔案建立:popup.html 與 popup.js
* 建立 popup.html(popup.html)作為 Popup 的 UI 入口
* 建立 popup.js(popup.js)作為未來需要互動邏輯時的腳本位置
* 本範例強調不需要 JavaScript(JavaScript),popup.js 先保留不用
# popup.html:外部資源引入
* 使用 Google Fonts(Google Fonts)載入 Open Sans(Open Sans)字體
* 使用 Font Awesome(Font Awesome)CDN 引入圖示字型與圖示 class
* 這些外部資源用 link(link tag)放在 head(head)內
# popup.html:結構區塊與語意
* modal-header(modal-header)區塊放標題與 logo
* logo(logo)標題內含圖片 logo-icon(logo-icon)與文字標題
* version(version)用 span(span)顯示版本字串(例如 1.0.0)
* modal-content(modal-content)放簡短描述文字
* modal-icons(modal-icons)放各平台捷徑圖示
# 連結清單與圖示呈現方式
* 使用 flex-container(flex-container)搭配 Flexbox(Flexbox)來排版
* 每個捷徑是一個 flex(flex)區塊,裡面是 a(anchor)連結
* 每個 a 內用 i(i tag)套 Font Awesome class,例如 fa fa-globe(fa fa-globe)
* 連結都加 target="_blank"(target="_blank")確保在新分頁開啟
* 示範連結平台包含個人網站、YouTube、Twitter、Facebook、GitHub
# 本地預覽與目前畫面狀態
* 可直接用瀏覽器開啟 popup.html 先看靜態版
* 也可用 VS Code Live Server(Live Server)快速預覽
* 目前只完成 HTML 結構與外部資源引入,尚未加 CSS 樣式,因此畫面「不太好看」是預期狀態
---
# 在 popup.html 內加入 CSS 的方式
* 在 head(head)加入 style(style tag)直接寫內嵌樣式(Inline CSS)
* 這種做法適合小型 Popup,檔案少、好搬移,但專案變大會較難維護
# 全域樣式:html、body
* 設定字體為 Open Sans(Open Sans)與 sans-serif(sans-serif)
* 設定基本字級(font-size)為 14px
* 取消預設外距(margin: 0)與內距(padding: 0)
* 設定最小高度(min-height)180px,固定寬度(width)384px 讓 Popup 尺寸一致
# 標題樣式:h1(Logo 文字)
* 字體改用 Menlo(Menlo)作為標題字體
* 字級(font-size)22px、字重(font-weight)400,並把 margin 設為 0
* 設定品牌色(color)為 #2f5876
# 連結樣式:a:link、a:visited
* 連結顏色統一設為黑色(color: black)
* 移除外框(outline: 0)避免點擊後出現預設 focus 外框
* 移除底線(text-decoration: none)讓圖示連結更乾淨
# Logo 圖片樣式:img
* 設定寬度(width)30px 讓 Popup header 的 logo 不會太大
* 用於控制 header 中 logo-icon(logo-icon)的視覺比例
# Header 區塊:modal-header
* 使用 align-items: center(align-items: center)讓 header 內容垂直置中
* 加底部分隔線(border-bottom)0.5px solid #dadada 做出區塊切分感
# 內容區塊:modal-content
* 設定左右內距(padding)為 0 20px,讓文字不貼邊
* 上下留白較少以維持 Popup 精簡
# 圖示區塊:modal-icons
* 加上部分隔線(border-top)0.5px solid #dadada
* 固定高度(height)50px,寬度(width)100% 撐滿容器
# Logo 排版:logo、logo-icon
* logo(logo)加 padding 16px,讓 header 內部有舒服留白
* logo-icon(logo-icon)使用 vertical-align: text-bottom(vertical-align: text-bottom)讓圖標對齊文字基線
* logo-icon(logo-icon)加 margin-right 12px 讓圖標與標題文字有間距
# 版本字樣:version
* 顏色設為 #444(#444)降低存在感但仍清楚
* 字級(font-size)18px,與標題搭配不會太小
# 圖示列排版:flex-container
* 設定 display: flex(display: flex)使用 Flexbox(Flexbox)布局
* justify-content: space-between(justify-content: space-between)讓圖示平均分散
* padding 設 10px 20px,保留上下與左右的留白
# 單一圖示項目:flex 與 hover 效果
* flex(flex)預設透明度(opacity)1
* 加入 transition(transition)讓透明度變化更平滑:opacity 0.2s ease-in-out
* 設定 width 120px 控制每個圖示區塊寬度
* flex:hover(flex:hover)把 opacity 降到 0.4,達成滑過淡化效果
# Font Awesome 圖示大小與顏色
* 針對 .flex .fa(.flex .fa)設定 font-size 40px 放大圖示
* 圖示顏色(color)設為品牌色 #2f5876,與標題一致
# popup.js 的處理方式
* 雖然本範例不使用 JavaScript(JavaScript),仍在 popup.html 末端引入 popup.js(popup.js)
* 保留未來要加互動邏輯時的擴充空間
# 載入本地擴充功能測試
* 前往 chrome://extensions(chrome://extensions)並開啟開發者模式(Developer mode)
* 使用「Load unpacked」(Load unpacked)選取專案資料夾載入
* 若工具列沒有顯示圖示,可重啟 Chrome 或到拼圖選單固定(Pin)擴充功能
* 點擊工具列圖示會開啟 Popup,點擊任一圖示連結會以新分頁開啟
# 上架 Chrome Web Store 的流程重點
* 將整個專案資料夾壓縮為 zip(zip file)作為上傳檔
* 到 Chrome Web Store 開發者後台(Developer dashboard)選擇新增項目並上傳 zip
* 需要提供 128×128 圖示(128×128 icon)
* 需要提供至少一張截圖(Screenshot),尺寸建議 1280×800 或 640×400
* 送出後審核通過即可在商店搜尋到並安裝(Add to Chrome)
---
# Terminology
* 啟動器擴充套件(Launcher Extension):以彈窗提供捷徑連結,快速開啟常用網站或工具的擴充型態
* 純前端擴充(HTML/CSS-only Extension):不依賴 JavaScript 邏輯、以靜態頁面呈現功能的擴充做法
* Manifest v2(MV2, Manifest Version 2):舊版擴充規格,使用 browser_action 等欄位描述行為
* manifest.json(擴充描述檔):擴充套件的必要檔案,定義名稱、版本、權限、圖示與彈窗入口
* browser_action(工具列動作):MV2 的工具列按鈕設定區,指定圖示與預設彈窗
* default_popup(預設彈窗):指定點擊擴充圖示時顯示的 HTML 檔案
* default_icon(預設圖示):指定工具列按鈕使用的圖示檔與對應尺寸
* icons 欄位(Icons Manifest Field):宣告不同尺寸圖示供商店與系統介面使用
* 工具列圖示(Toolbar Icon):顯示在瀏覽器工具列上的擴充按鈕圖示
* 應用程式圖示(App Icon):用於商店列表、詳情頁與安裝流程的主要圖示(常見 128×128)
* 圖示尺寸規範(Icon Size Guidelines):不同展示位置需要不同像素尺寸的圖示配置規則
* 彈窗頁面(Popup Page):點擊擴充圖示後出現的小型 HTML 視窗,用於快速操作與導覽
* 外部連結(External Links):在擴充彈窗中指向外部網站的超連結集合
* 新分頁開啟(target="_blank"):讓連結在新分頁開啟以避免覆蓋目前工作頁面
* 活躍分頁權限(activeTab Permission):允許擴充在使用者互動後暫時存取目前分頁的權限
* 權限最小化(Principle of Least Privilege):只申請必要權限以降低風險並提升使用者信任
* 開發者模式(Developer Mode):啟用後可載入未封裝擴充並查看錯誤與除錯資訊
* 載入未封裝擴充(Load Unpacked Extension):直接從本機資料夾載入擴充進行測試的方式
* 本機測試(Local Testing):在未上架前於本機環境反覆載入、驗證與調整的流程
* 資料夾結構(Project Folder Structure):以根目錄放 manifest 與圖示、子目錄放資源的組織方式
* 靜態資源(Static Assets):圖示、圖片、字型等不需編譯即可被引用的檔案
* 影像資源目錄(Images Directory):集中管理彈窗內使用的圖片與品牌素材的資料夾
* 品牌識別(Branding):透過顏色、字體、Logo 一致化提升辨識度與專業感的設計策略
* Google Fonts(Google 字型服務):以 CDN 載入網頁字型的服務,常用於提升排版一致性
* Open Sans(Open Sans):常用的無襯線網頁字體,適合 UI 與資訊呈現
* 字型後備(Font Fallback):當主要字體不可用時,指定替代字體以確保顯示穩定
* Font Awesome(Font Awesome):以圖示字型/SVG 提供大量通用圖示的前端資源庫
* CDN(Content Delivery Network):透過分散節點加速載入第三方資源的網路分發方式
* Link 標籤載入(<link rel="stylesheet">):在 HTML 中引入外部 CSS 的標準做法
* Emmet(Emmet):用縮寫快速生成 HTML/CSS 結構的編輯器工具
* Flexbox(CSS Flexible Box Layout):用於一維佈局的 CSS 模型,適合對齊與分配空間
* Flex 容器(Flex Container):設定 display:flex 的父元素,控制子元素排列方式
* justify-content(主軸對齊):控制 Flex 子項在主軸上的對齊與空間分配(如 space-between)
* space-between(兩端對齊分散):在 Flex 主軸上把剩餘空間平均分配到項目間的值
* 盒模型(Box Model):CSS 對元素內容、內距、邊框、外距的尺寸計算模型
* 內距(Padding):元素內容與邊框之間的空間,用於留白與提升可讀性
* 外距(Margin):元素與元素之間的空間,用於版面間隔與視覺節奏
* 邊框(Border):元素邊緣線條,可用於分隔區塊與建立層次
* 最小高度(min-height):限制元素最小高度,確保彈窗不會過小影響閱讀
* 固定寬度(Fixed Width):用固定像素設定彈窗寬度,避免版面在不同內容下抖動
* 透明度(Opacity):控制元素不透明度,常用於 hover 視覺回饋
* 過渡效果(CSS Transition):讓樣式變更以動畫方式平滑呈現的 CSS 機制
* easing(Ease-in-out):過渡曲線,讓動畫開始與結束更自然、減少突兀感
* hover 狀態(:hover Pseudo-class):滑鼠懸停時套用的樣式狀態,用於互動提示
* 文字裝飾(text-decoration):控制連結底線等文字修飾,常用於移除預設下劃線
* 連結狀態(:link/:visited):控制未點擊與已造訪連結的樣式一致性與可讀性
* Web Store 開發者後台(Chrome Web Store Developer Dashboard):管理上架、版本、素材與審核流程的控制台
* 打包壓縮(ZIP Packaging):將擴充檔案壓縮成 ZIP 以便上傳到商店審核
* 商店素材(Store Listing Assets):上架所需的圖示、截圖、描述與宣傳圖等資產
* 截圖規格(Screenshot Requirements):商店要求的最小解析度與尺寸比例(如 1280×800 或 640×400)
* 上架審核(Review & Publishing):提交後由商店流程檢查合規與內容,通過後公開可安裝
* 搜尋可見度(Store Search Visibility):在商店搜尋結果中的曝光能力,影響自然安裝量