成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

了解Chrome擴(kuò)展程序開(kāi)發(fā)

lemanli / 3284人閱讀

摘要:了解擴(kuò)展程序開(kāi)發(fā)本文大量借鑒圖靈電子書(shū)擴(kuò)展及應(yīng)用開(kāi)發(fā)首發(fā)版首先,我嘗試來(lái)用簡(jiǎn)單幾句話描述一下擴(kuò)展程序擴(kuò)展主要用于對(duì)瀏覽器功能的增強(qiáng),它強(qiáng)調(diào)與瀏覽器相結(jié)合。提供了接口,允許擴(kuò)展對(duì)用戶的歷史進(jìn)行管理。

了解Chrome擴(kuò)展程序開(kāi)發(fā)

本文大量借鑒圖靈電子書(shū)-Chrome擴(kuò)展及應(yīng)用開(kāi)發(fā)(首發(fā)版)

首先,我嘗試來(lái)用簡(jiǎn)單幾句話描述一下Chrome擴(kuò)展程序:

Chrome擴(kuò)展主要用于對(duì)瀏覽器功能的增強(qiáng),它強(qiáng)調(diào)與瀏覽器相結(jié)合。比如Chrome擴(kuò)展可以在瀏覽器的工具欄和地址欄中顯示圖標(biāo),它可以更改用戶當(dāng)前瀏覽的網(wǎng)頁(yè)中的內(nèi)容,也可以更改瀏覽器代理服務(wù)器的設(shè)置等等。

0. 認(rèn)識(shí)Chrome擴(kuò)展程序 - 最重要的入口 manifest.json

Chrome擴(kuò)展是一系列文件的集合,這些文件包括HTML文件、CSS樣式文件、JavaScript腳本文件、圖片等靜態(tài)文件以及manifest.json。清單文件信息

擴(kuò)展被安裝后,Chrome就會(huì)讀取擴(kuò)展中的manifest.json文件。這個(gè)文件的文件名固定為manifest.json,內(nèi)容是按照一定格式描述的擴(kuò)展相關(guān)信息,如擴(kuò)展名稱(chēng)、版本、更新地址、請(qǐng)求的權(quán)限、擴(kuò)展的UI界面入口等等。這樣Chrome就可以知道在瀏覽器中如何呈現(xiàn)這個(gè)擴(kuò)展,以及這個(gè)擴(kuò)展如何同用戶進(jìn)行交互。

通過(guò)Chrome擴(kuò)展我們可以對(duì)用戶當(dāng)前瀏覽的頁(yè)面進(jìn)行操作,實(shí)際上就是對(duì)用戶當(dāng)前瀏覽頁(yè)面的DOM進(jìn)行操作。通過(guò)Manifest中的content_scripts屬性可以指定將哪些腳本何時(shí)注入到哪些頁(yè)面中,當(dāng)用戶訪問(wèn)這些頁(yè)面后,相應(yīng)腳本即可自動(dòng)運(yùn)行,從而對(duì)頁(yè)面DOM進(jìn)行操作。

值得一提的是,Google允許Chrome擴(kuò)展應(yīng)用不必受限于跨域限制??缬蛑傅氖荍avaScript通過(guò)XMLHttpRequest請(qǐng)求數(shù)據(jù)時(shí),調(diào)用JavaScript的頁(yè)面所在的域和被請(qǐng)求頁(yè)面的域不一致。對(duì)于網(wǎng)站來(lái)說(shuō),瀏覽器出于安全考慮是不允許跨域。這個(gè)規(guī)則如果同樣限制Chrome擴(kuò)展應(yīng)用,就會(huì)使其能力大打折扣,所以Google允許Chrome擴(kuò)展應(yīng)用不必受限于跨域限制。但出于安全考慮,需要在Manifest的permissions屬性中聲明需要跨域的權(quán)限。

1. 操作用戶正在瀏覽的頁(yè)面

通過(guò)Chrome擴(kuò)展我們可以對(duì)用戶當(dāng)前瀏覽的頁(yè)面進(jìn)行操作,實(shí)際上就是對(duì)用戶當(dāng)前瀏覽頁(yè)面的DOM進(jìn)行操作。通過(guò)Manifest中的content_scripts屬性可以指定將哪些腳本何時(shí)注入到哪些頁(yè)面中,當(dāng)用戶訪問(wèn)這些頁(yè)面后,相應(yīng)腳本即可自動(dòng)運(yùn)行,從而對(duì)頁(yè)面DOM進(jìn)行操作。

content_scripts很像Userscript,它就是將指定的腳本文件插入到符合規(guī)則的特定頁(yè)面中,從而使插入的腳本可以對(duì)頁(yè)面的DOM進(jìn)行操作。

2. 常駐后臺(tái)

有時(shí)我們希望擴(kuò)展不僅在用戶主動(dòng)發(fā)起時(shí)(如開(kāi)啟特定頁(yè)面或點(diǎn)擊擴(kuò)展圖標(biāo)等)才運(yùn)行,而是希望擴(kuò)展自動(dòng)運(yùn)行并常駐后臺(tái)來(lái)實(shí)現(xiàn)一些特定的功能,比如實(shí)時(shí)提示未讀郵件數(shù)量、后臺(tái)播放音樂(lè)等等。

Chrome允許擴(kuò)展應(yīng)用在后臺(tái)常駐一個(gè)頁(yè)面以實(shí)現(xiàn)這樣的功能。在一些典型的擴(kuò)展中,UI頁(yè)面,如popup頁(yè)面或者options頁(yè)面,在需要更新一些狀態(tài)時(shí),會(huì)向后臺(tái)頁(yè)面請(qǐng)求數(shù)據(jù),而當(dāng)后臺(tái)頁(yè)面檢測(cè)到狀態(tài)發(fā)生改變時(shí),也會(huì)通知UI界面刷新。后臺(tái)頁(yè)面與UI頁(yè)面可以相互通信.

在Manifest中指定background域可以使擴(kuò)展常駐后臺(tái)。background可以包含三種屬性,分別是scripts、page和persistent。如果指定了scripts屬性,則Chrome會(huì)在擴(kuò)展啟動(dòng)時(shí)自動(dòng)創(chuàng)建一個(gè)包含所有指定腳本的頁(yè)面;如果指定了page屬性,則Chrome會(huì)將指定的HTML文件作為后臺(tái)頁(yè)面運(yùn)行。通常我們只需要使用scripts屬性即可,除非在后臺(tái)頁(yè)面中需要構(gòu)建特殊的HTML——但一般情況下后臺(tái)頁(yè)面的HTML我們是看不到的。persistent屬性定義了常駐后臺(tái)的方式——當(dāng)其值為true時(shí),表示擴(kuò)展將一直在后臺(tái)運(yùn)行,無(wú)論其是否正在工作;當(dāng)其值為false時(shí),表示擴(kuò)展在后臺(tái)按需運(yùn)行,這就是Chrome后來(lái)提出的Event Page。Event Page可以有效減小擴(kuò)展對(duì)內(nèi)存的消耗,如非必要,請(qǐng)將persistent設(shè)置為false。persistent的默認(rèn)值為true。

3. 帶選項(xiàng)頁(yè)面的擴(kuò)展

"options_page": "options.html"

一般來(lái)說(shuō)做一些選擇設(shè)置然后本地localstorage的工作

4. 擴(kuò)展頁(yè)面間的通信

Chrome提供了4個(gè)有關(guān)擴(kuò)展頁(yè)面間相互通信的接口,分別是runtime.sendMessage、runtime.onMessage、runtime.connect和runtime.onConnect。

請(qǐng)注意,Chrome提供的大部分API是不支持在content_scripts中運(yùn)行的,但runtime.sendMessage和runtime.onMessage可以在content_scripts中運(yùn)行,所以擴(kuò)展的其他頁(yè)面也可以同content_scripts相互通信。

runtime.sendMessage完整的方法為:

chrome.runtime.sendMessage(extensionId, message, options, callback)

其中extensionId為所發(fā)送消息的目標(biāo)擴(kuò)展,如果不指定這個(gè)值,則默認(rèn)為發(fā)起此消息的擴(kuò)展本身;message為要發(fā)送的內(nèi)容,類(lèi)型隨意,內(nèi)容隨意,比如可以是"Hello",也可以是{action: "play"}、2013和["Jim", "Tom", "Kate"]等等;

runtime.onMessage完整的方法為:

chrome.runtime.onMessage.addListener(callback)

此處的callback為必選參數(shù),為回調(diào)函數(shù)。callback接收到的參數(shù)有三個(gè),分別是message、sender和sendResponse,即消息內(nèi)容、消息發(fā)送者相關(guān)信息和相應(yīng)函數(shù)。其中sender對(duì)象包含4個(gè)屬性,分別是tab、id、url和tlsChannelId,tab是發(fā)起消息的標(biāo)簽

5. Browser Actions

1.圖標(biāo)

"browser_action": {
    "default_icon": {
        "19": "images/icon19.png",
        "38": "images/icon38.png"
    }
}

chrome.browserAction.setIcon(details, callback) // details的類(lèi)型為對(duì)象,可以包含三個(gè)屬性,分別是imageData、path和tabId。

2.Popup頁(yè)面

Popup頁(yè)面提供了一個(gè)簡(jiǎn)單便捷的UI接口。新窗口會(huì)使用戶反感,而popup頁(yè)面的設(shè)計(jì)更像是瀏覽器的一部分,但popup頁(yè)面并不適用于所有情況。由于其在關(guān)閉后,就相當(dāng)于用戶關(guān)閉了相應(yīng)的標(biāo)簽頁(yè)。當(dāng)用戶再次打開(kāi)這個(gè)頁(yè)面時(shí),所有的DOM和js空間變量都將被重新創(chuàng)建。

使用帶有滾動(dòng)條的DIV容器。

設(shè)計(jì)一個(gè)更好的滾動(dòng)條樣式。

考慮屏蔽右鍵菜單。

使用外部引用的腳本。

值得注意的是Chrome不允許將JavaScript代碼段直接內(nèi)嵌入HTML文檔,所以我們需要通過(guò)外部引入的方式引用JS文件。當(dāng)然inline-script也是被禁止的,所以所有元素的事件都需要使用JavaScript代碼進(jìn)行綁定。

不要在popup頁(yè)面的js空間變量中保存數(shù)據(jù)。

3.標(biāo)題和badge

將鼠標(biāo)移至擴(kuò)展圖標(biāo)上,片刻后所顯示的文字就是擴(kuò)展的標(biāo)題。標(biāo)題不僅僅只是給出擴(kuò)展的名稱(chēng),有時(shí)它能為用戶提供更多的信息。比如一款聊天客戶端的標(biāo)題,可以動(dòng)態(tài)地顯示當(dāng)前登錄的帳戶信息,如號(hào)碼和登錄狀態(tài)等。所以如果能合理使用好擴(kuò)展的標(biāo)題,會(huì)給用戶帶來(lái)更好的體驗(yàn)。

"browser_action": {
    "default_title": "Extension Title"
}

chrome.browserAction.setTitle({title: "This is a new title"});

Badge相當(dāng)于APP未讀消息數(shù)的小氣泡。目前只能夠通過(guò)JavaScript設(shè)定顯示的內(nèi)容,同時(shí)Chrome還提供了更改badge背景的方法。如果不定義badge的背景顏色,默認(rèn)將使用紅色。badge目前還不支持更改文字的顏色——始終是白色,所以應(yīng)避免使用淺顏色作為背景。

chrome.browserAction.setBadgeBackgroundColor({color: "#0000FF"});
chrome.browserAction.setBadgeBackgroundColor({color: [0, 255, 0, 128]});
chrome.browserAction.setBadgeText({text: "Dog"});
6. 右鍵菜單、桌面提醒、地址欄(略過(guò))

當(dāng)用戶在網(wǎng)頁(yè)中點(diǎn)擊鼠標(biāo)右鍵后,會(huì)喚出一個(gè)菜單,在上面有復(fù)制、粘貼和翻譯等選項(xiàng),為用戶提供快捷便利的功能。Chrome也將這里開(kāi)放給了開(kāi)發(fā)者,也就是說(shuō)我們可以把自己所編寫(xiě)的擴(kuò)展功能放到右鍵菜單中。

要將擴(kuò)展加入到右鍵菜單中,首先要在Manifest的permissions域中聲明contextMenus權(quán)限。

"permissions": [
    "contextMenus"
]
"icons": {
    "16": "icon16.png"
}

之前的章節(jié)提到過(guò)利用標(biāo)題和badge向用戶提供有限的信息,那么如果需要向用戶提供更加豐富的信息怎么辦呢?Chrome提供了桌面提醒功能,這個(gè)功能可以為用戶提供更加豐富的信息。

"permissions": [
    "notifications"
]

創(chuàng)建桌面提醒非常容易,只需指定標(biāo)題、內(nèi)容和圖片即可。下面的代碼生成了標(biāo)題為“Notification Demo”,內(nèi)容為“Merry Christmas”,圖片為“icon48.png”的桌面提醒窗口。

var notification = webkitNotifications.createNotification(
    "icon48.png",
    "Notification Demo",
    "Merry Christmas"
);
notification.show();

需要注意的是,對(duì)于要在桌面窗口中顯示的圖片,必須在Manifest的web_accessible_resources域中進(jìn)行聲明,否則會(huì)出現(xiàn)圖片無(wú)法打開(kāi)的情況:

"web_accessible_resources": [
    "images/*.png"
]

桌面提醒窗口提供了四種事件:ondisplay、onerror、onclose和onclick。

除了用戶主動(dòng)關(guān)閉桌面提醒窗口外,還可以通過(guò)cancel方法自動(dòng)關(guān)閉。

setTimeout(function(){
    notification.cancel();
},5000);
7. 管理你的瀏覽器

1.書(shū)簽

Chrome為開(kāi)發(fā)者提供了添加、分類(lèi)(書(shū)簽文件夾)和排序等方法來(lái)操作書(shū)簽,同時(shí)也提供了讀取書(shū)簽的方法。
要在擴(kuò)展中操作書(shū)簽,需要在Manifest中聲明bookmarks權(quán)限:

"permissions": [
    "bookmarks"
]

2.Cookies

Cookies是瀏覽器記錄在本地的用戶數(shù)據(jù),如用戶的登錄信息。Chrome為擴(kuò)展提供了Cookies API用以管理Cookies。
要管理Cookies,需要在Manifest中聲明cookies權(quán)限,同時(shí)也要聲明所需管理Cookies所在的域:

"permissions": [
    "cookies",
    "*://*.google.com"
]
"permissions": [
    "cookies",
    ""
]

3.歷史

歷史用于記錄用戶訪問(wèn)過(guò)頁(yè)面的信息。與書(shū)簽一樣,歷史也是瀏覽器很早就具有的功能,對(duì)用戶來(lái)說(shuō)也是一個(gè)很重要的功能。Chrome提供了history接口,允許擴(kuò)展對(duì)用戶的歷史進(jìn)行管理。

要使用history接口,需要在Manifest中聲明history權(quán)限:

"permissions": [
    "history"
]

4.管理擴(kuò)展與應(yīng)用

除了通過(guò)chrome://extensions/管理Chrome擴(kuò)展和應(yīng)用外,也可以通過(guò)Chrome的management接口管理。management接口可以獲取用戶已安裝的擴(kuò)展和應(yīng)用信息,同時(shí)還可以卸載和禁用它們。通過(guò)management接口可以編寫(xiě)出智能管理擴(kuò)展和應(yīng)用的程序。

要使用management接口,需要在Manifest中聲明management權(quán)限:

"permissions": [
    "management"
]

5.標(biāo)簽

Chrome通過(guò)tabs方法提供了管理標(biāo)簽的方法與監(jiān)聽(tīng)標(biāo)簽行為的事件,大多數(shù)方法與事件是無(wú)需聲明特殊權(quán)限的,但有關(guān)標(biāo)簽的url、title和favIconUrl的操作(包括讀?。?,都需要聲明tabs權(quán)限。

"permissions": [
    "tabs"
]

6.Override Pages

Chrome不僅提供了管理書(shū)簽、歷史和標(biāo)簽的接口,還支持用自定義的頁(yè)面替換Chrome相應(yīng)默認(rèn)的頁(yè)面,這就是override pages。目前支持替換的頁(yè)面包含Chrome的書(shū)簽頁(yè)面、歷史記錄和新標(biāo)簽頁(yè)面。

使用override pages很簡(jiǎn)單,只需在Manifest中進(jìn)行聲明即可(一個(gè)擴(kuò)展只能替換一個(gè)頁(yè)面):

"chrome_url_overrides" : {
    "bookmarks": "bookmarks.html"
}
"chrome_url_overrides" : {
    "history": "history.html"
}
"chrome_url_overrides" : {
    "newtab": "newtab.html"
}
8. 高級(jí)API

1.下載

"permissions": [
    "downloads"
]
chrome.downloads.download(options, callback);
// options
{
    url: 下載文件的url,
    filename: 保存的文件名,
    conflictAction: 重名文件的處理方式,
    saveAs: 是否彈出另存為窗口,
    method: 請(qǐng)求方式(POST或GET),
    headers: 自定義header數(shù)組,
    body: POST的數(shù)據(jù)
}

2.網(wǎng)絡(luò)請(qǐng)求

Chrome提供了較為完整的方法供擴(kuò)展程序分析、阻斷及更改網(wǎng)絡(luò)請(qǐng)求,同時(shí)也提供了一系列較為全面的監(jiān)聽(tīng)事件以監(jiān)聽(tīng)整個(gè)網(wǎng)絡(luò)請(qǐng)求生命周期的各個(gè)階段。

要對(duì)網(wǎng)絡(luò)請(qǐng)求進(jìn)行操作,需要在Manifest中聲明webRequest權(quán)限以及相關(guān)被操作的URL。如需要阻止網(wǎng)絡(luò)請(qǐng)求,需要聲明webRequestBlocking權(quán)限。

"permissions": [
    "webRequest",
    "webRequestBlocking",
    "*://*.google.com/"
]

3.代理

代理可以讓用戶通過(guò)代理服務(wù)器瀏覽網(wǎng)絡(luò)資源以達(dá)到匿名訪問(wèn)等目的。代理的類(lèi)型有多種,常用的包括http代理和socks代理等。有時(shí)我們不希望所有的網(wǎng)絡(luò)資源都通過(guò)代理瀏覽,這種情況下通常會(huì)使用pac腳本來(lái)告訴瀏覽器使用代理訪問(wèn)的規(guī)則。

Chrome瀏覽器提供了代理設(shè)置管理接口,這樣可以讓擴(kuò)展來(lái)做到更加智能的代理設(shè)置。要讓擴(kuò)展使用代理接口,需要聲明proxy權(quán)限:

"permissions": [
    "proxy"
]

4.系統(tǒng)信息

Chrome提供了獲取系統(tǒng)CPU、內(nèi)存和存儲(chǔ)設(shè)備的信息。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/90799.html

相關(guān)文章

  • chrome擴(kuò)展應(yīng)用開(kāi)發(fā)快速科普

    摘要:擴(kuò)展應(yīng)用模塊功能介紹擴(kuò)展應(yīng)用由很多部分組成,其中主要模塊為為了避免由于翻譯原因?qū)е碌膯?wèn)題,因此在下文中對(duì)相關(guān)模塊的稱(chēng)呼一律采用上面的英文。附錄官方開(kāi)發(fā)文檔英建議有英文閱讀能力的人閱讀此文檔。 概述 本文通過(guò)對(duì)chrome插件的各個(gè)部分進(jìn)行快速的介紹,從而讓大家了解插件各個(gè)部分的關(guān)系,并且知道如何將其進(jìn)行組裝成一個(gè)完整的chrome插件。 由于chrome官方文檔中對(duì)于如何從零開(kāi)發(fā)一個(gè)c...

    MockingBird 評(píng)論0 收藏0
  • # 編寫(xiě)第一個(gè)Chrome Extension

    摘要:可以加載到內(nèi),通過(guò)操縱瀏覽器,從而完成一些定制的工作。一個(gè)最低需求的文件是必要的可選的圖標(biāo)等。如果這樣驗(yàn)證都是如期望的話,就表明你的第一個(gè)擴(kuò)展已經(jīng)開(kāi)發(fā)成功。正式發(fā)布可以在內(nèi)發(fā)布擴(kuò)展,只要點(diǎn)擊進(jìn)入后,按照操作指示即可。 Chrome Extension可以加載到Chrome內(nèi),通過(guò)操縱Chrome瀏覽器,從而完成一些定制的工作。 假設(shè)你想要一個(gè)功能,它可以在你點(diǎn)擊上下文菜單項(xiàng)目時(shí)剪貼當(dāng)前...

    joyqi 評(píng)論0 收藏0
  • 分析chrome擴(kuò)展程序-Holmes

    摘要:業(yè)務(wù)邏輯業(yè)務(wù)邏輯在內(nèi),主要涉及的是按鍵事件交互處理以及檢索結(jié)果展示。目前,這個(gè)擴(kuò)展程序在說(shuō)明上貌似最新一版已經(jīng)是年的事了,看來(lái)作者也沒(méi)有繼續(xù)更新的打算了 前陣子在微博看到關(guān)于chrome書(shū)簽搜索的擴(kuò)展程序Holmes,于是使用了一下,確實(shí)還不錯(cuò),尤其書(shū)簽多很多的情況下,有個(gè)搜索功能 ,比定時(shí)做書(shū)簽分類(lèi)等等方便得多很多。看著擴(kuò)展程序功能簡(jiǎn)單,感覺(jué)實(shí)現(xiàn)應(yīng)該不難,于是我就試著查看一下擴(kuò)展程序...

    cgh1999520 評(píng)論0 收藏0
  • Crown -- 一款快速檢索并切換你的書(shū)簽與Tabs的chrome擴(kuò)展

    摘要:在此期間我的文章會(huì)同步更新在以下地方歡迎大家在自己長(zhǎng)逛的網(wǎng)站中關(guān)注或者我的來(lái)了解我的最新消息推薦大家收藏關(guān)注我的博客網(wǎng)站,因?yàn)槲业淖钚赂呐c文章只會(huì)在這里更新,其他地方的文章可能會(huì)存在更新不及時(shí)或者忘記更新等問(wèn)題。 之前一直在找一款現(xiàn)成的已經(jīng)實(shí)現(xiàn)了如標(biāo)題所說(shuō)的chrome擴(kuò)展, 但卻一直沒(méi)有找到, 于是最近花了私底下的一些空閑時(shí)間去按照自己所想要的功能去打造了這么一款chrome擴(kuò)展,...

    SHERlocked93 評(píng)論0 收藏0
  • 來(lái)玩玩chrome擴(kuò)展

    摘要:很多人還是對(duì)有偏見(jiàn)呀,覺(jué)得只能寫(xiě)寫(xiě)網(wǎng)頁(yè)。比如看看的,一個(gè)只有游覽器的本子已經(jīng)可以擔(dān)負(fù)起大部分用戶的日常需求了,其實(shí)的擴(kuò)展和應(yīng)用都很容易,會(huì)的很快能上手。前幾天偶然翻到一本擴(kuò)展及應(yīng)用開(kāi)發(fā),寫(xiě)的很好,而且也免費(fèi)。來(lái)到這個(gè)有趣的星球已經(jīng)天 很多人還是對(duì)javascript有偏見(jiàn)呀,覺(jué)得只能寫(xiě)寫(xiě)網(wǎng)頁(yè)。其實(shí)現(xiàn)在整個(gè)互聯(lián)網(wǎng)包括軟件行業(yè)都在強(qiáng)調(diào)快速迭代,而很多產(chǎn)品都是全平臺(tái)的,所以跨平臺(tái)是個(gè)很大的優(yōu)...

    ?xiaoxiao, 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<