今天要繼續著學習怎麼運用 chrome.webRequest 功能,以及blocking的運用,
而且剛好工程師的工作經常需要瀏覽網站,所以有可能會不小心點到不安全的網站,
於是我們可以運用chrome extension來幫我們監控與安全性防護,
那我們就開始吧!(依舊是用empty project模組來開發喔!)
首先要先開通後台腳本的全程監控
manifest.json
"background": {
"scripts": [
"background/bg.js"
],
"persistent": true
},
然後要開啟網站的最高權限以及通知(notifications),讓我們在網站請求被駁回時可以警告使用者
manifest.json
"permissions": [
"activeTab",
"notifications",
"tabs",
"webRequest",
"webRequestBlocking",
"http://*/*",
"https://*/*"
]
好了!那我們就來寫後台腳本吧!首先建個假裝API回傳資料的格式
background/bg.js
var db = {
warning: ['https://www.kcg.gov.tw/*', 'https://kcginfo.kcg.gov.tw/*'],
danger: ['https://www.chinatimes.com/*', 'http://www.ctitv.com.tw/*']
}
然後宣告一個變數來監控是否要繼續執行請求
var warningCallback = function(details) {
if(confirm("警告!你即將進入管制地帶,請問你仍要進入網站嗎?")){
chrome.webRequest.onBeforeRequest.removeListener(warningCallback)
chrome.notifications.create('confirmWeb',{
type: 'basic',
iconUrl: 'icons/icon16.png',
title: '關閉監控!',
message: '已經關閉對warning等級的監控!'
})
}else{
return { redirectUrl: 'https://www.google.com/' }
}
}
chrome.webRequest.onBeforeRequest.addListener(
warningCallback,
{ urls: db.warning }, //需是陣列型態
['blocking']
)
由上述可看到,在第一次請求時如果使用者允許的話就會停止監控功能,並且使用notification做提醒,否則就會將網站導向google,而用命名函數的原因是要removeListener的話只能對命名函數做關閉,匿名則無法關閉。
接下來是強制關閉網站的請求方法
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
chrome.notifications.create('cancelWeb',{
type: 'basic',
iconUrl: 'icons/icon16.png',
title: '網站封鎖!',
message: '您前往的網站已封鎖,無法瀏覽!'
})
return { cancel: true }
},
{ urls: db.danger }, //需是陣列型態
['blocking']
)
這個比較簡單,只要符合需求的網站就會被直接關閉,並且跳出警告提示。
所以當我們載入了以後,只要開啟了警告(warning)網站就會觸發confirm
當我們選擇『否』就會跳窗到www.google.com
但如果我們選擇『是』,就會關閉監控並繼續執行請求
而危險(danger)的網站,則是連開啟都不能開啟
並且右下角會跳出提示,這樣就大功告成拉!
後話:其實要阻止瀏覽的方式有很多,可以使用chrome.tabs或是內容腳本直接window.close(),這裡只是提供一個方法讓大家參考,並不代表是最適合的方法喔!