張凱迪(KD Chang)
台灣大學,主修經濟學,臺大資管所。服務過上市電子公司、人工智慧新創公司、全球前三大瀏覽器製造商和電子商務平台,也曾參與數個組織的創辦。夢想是做出人們想用的產品和辦一所心目中理想的學校。
講師:張凱迪(KD Chang)
Copyright © 2016 All rights reserved
一、開啟專案建置文件架構
二、Chrome Extension 簡介
三、函數 / 事件處理 / 日期物件
四、Ajax 非同步資料傳輸 / JSON
五、案例實作
一個 Chrome Extension 由一個 manifest.json 和其他網頁檔案組成,
檔案結構約如左圖
建立新的資料夾,打開 Sublime 後開啟資料夾
於專案列建立 images, styles, scripts 資料夾
於根目錄建立 index.html 和 manifest.json 檔案
Extensions are small software programs
Modify and enhance the functionality of the Chrome browser
Write in HTML, JavaScript, and CSS !
描述檔案的檔案
{
"name": "台灣風景分頁(Taiwan New Tab)",
"version": "0.0.1",
"manifest_version": 2,
"description": "分享台灣的美好風景",
"short_name": "台灣風景分頁",
"icons": {
"16": "images/icon-16.png",
"128": "images/icon-128.png"
},
"background": {
"scripts": [
"scripts/background.js"
]
},
"chrome_url_overrides": {
"newtab": "index.html"
},
"permissions": [
"http://*/*",
"https://*/*"
]
}
// 必要
"name": "Extension",
"version": "0.0.1",
// 一個代表 manifest file 格式版本的整數,如果使用的是 Chrome 18 以上,則應該設定成 2。
"manifest_version": 2,
// 建議填寫
"description": "A plain text description",
// 建議使用 .png 檔案。128x128:安裝時使用,48x48:在 chrome://extensions 裡顯示,16x16:favicon
"icons": { ... },
"default_locale": "en",
// 選填
"chrome_url_overrides": {
"newtab": "index.html"
},
Background Pages
大部分瀏覽器外掛會有一個 Background Page 常駐在背景,有可能是一個 HTML 或者 JavaScript 檔,定義邏輯部分,並透過 API 與 UI(browser actions 或 page actions)做溝通。
引入 JS ,將邏輯寫在裡面,為常駐程式
{
...
"background": {
"scripts": ["background.js"]
},
...
}
引入 HTML,可以引入多個 JS 檔案
{
...
"background": {
"page": "background.html"
},
...
}
UI Pages
Chrome Extension 的 UI 介面使用的是 HTML
運用 browser action 定義 popup.html
Browser Action (常駐工具列)
Page Action (特定頁面啟用)
Desktop Notifications (通知)
Omnibox (搜尋框旁小工具)
Override Pages (覆蓋頁面/新頁面)
Context Menu (右鍵選項單)
適合在需要一個常駐的功能放在 Chrome 工具列時使用,可以加上 tooltip、badge(訂閱RSS更新、信件數量) 和 popup
{
...
"browser_action": {
"default_icon": "icon.png", // 選擇性
"default_title": "Popup title", // 選擇性
"default_popup": "popup.html" // 滑鼠點擊呈現內容
},
...
}
popup 範例
類似 browser action,最大差異在於 page action 用於特定網頁才需要的功能,由於 browser action 常駐時會佔用一部份的記憶體。若是針對特定頁面如擋 Facebook,偵測 RSS 建議使用 page action
{
...
"page_action": {
"default_icon": "icon.png", // 選擇性
"default_title": "Popup title", // 選擇性
"default_popup": "popup.html" // 滑鼠點擊呈現內容
},
...
}
可以在瀏覽頁面裡面嵌入 JavaScript,可以透過 DOM 得知使用者目前瀏覽的頁面的內容,甚至可以修改頁面內容。
應用:去除廣告
{
...
"content_scripts": [
{
"matches": ["http://www.facebook.com/*"],
"css": ["main.css"],
"js": ["jquery.js", "main.js"]
}
],
...
}
// initializeClock
function initializeClock() {
var timeinterval = setInterval(function() {
var now = new Date();
$('#clock-font').html(formatAMPM(now));
}, 1000);
}
// toogle search bar
$('#navbtn').on('click', function() {
$('#input-block').toggle();
});
// transfer AM/PM
function formatAMPM(date) {
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
var ampm = hours >= 12 ? 'PM' : 'AM';
var strTime = '';
hours = hours % 12;
hours = hours ? hours : 12; // the hour '0' should be '12'
minutes = minutes < 10 ? '0' + minutes : minutes;
seconds = seconds < 10 ? '0' + seconds : seconds;
strTime = hours + ':' + minutes + ':' + seconds + ' ' + ampm;
return strTime;
}
$.ajax({
type: 'GET',
dataType: 'json',
url: url,
success: function(response) {
consoel.log(response)
},
error: function(e) {
}
}).done(function() {
// hide the loading bar as loading over
$('#loading-block').hide();
});
JSON(JavaScript Object Notation)是一種由輕量級的資料交換語言,以文字為基礎,且易於讓人閱讀。
{
"name": "John",
"sex": "male",
"age": 25,
"address":
{
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021"
},
"phoneNumber":
[
{
"type": "home",
"number": "212 555-1234"
},
{
"type": "fax",
"number": "646 555-4567"
}
]
}
By 張凱迪(KD Chang)
101一般是國外入門課程的課程代號,希望藉由這次的 Front End 101 Workshop 能讓對於網頁前端程式設計有興趣的朋友可以有一個和藹可親的入門管道,啟發學習興趣並認識志同道合的朋友。工作坊目標希望帶大家從基礎開始,最後完成一個瀏覽器外掛(extenstion)!
台灣大學,主修經濟學,臺大資管所。服務過上市電子公司、人工智慧新創公司、全球前三大瀏覽器製造商和電子商務平台,也曾參與數個組織的創辦。夢想是做出人們想用的產品和辦一所心目中理想的學校。