成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

MockingBird / 3145人閱讀

摘要:擴(kuò)展應(yīng)用模塊功能介紹擴(kuò)展應(yīng)用由很多部分組成,其中主要模塊為為了避免由于翻譯原因?qū)е碌膯栴},因此在下文中對相關(guān)模塊的稱呼一律采用上面的英文。附錄官方開發(fā)文檔英建議有英文閱讀能力的人閱讀此文檔。

概述

本文通過對chrome插件的各個(gè)部分進(jìn)行快速的介紹,從而讓大家了解插件各個(gè)部分的關(guān)系,并且知道如何將其進(jìn)行組裝成一個(gè)完整的chrome插件。

由于chrome官方文檔中對于如何從零開發(fā)一個(gè)chrome擴(kuò)展應(yīng)用沒有一套完整的流程,同時(shí)官方的API文檔對于初學(xué)者也不是那么友好,因此本文將通過一個(gè)初學(xué)者的視角來講解如何從零開始快速了解和開發(fā)一個(gè)chrome插件。

本文的目標(biāo)群體:已經(jīng)了解或使用過chrome擴(kuò)展應(yīng)用,但是自己不知道如何開發(fā)一個(gè)chrome擴(kuò)展應(yīng)用的工程師。如果有具體的chrome擴(kuò)展應(yīng)用開發(fā)經(jīng)驗(yàn)的同學(xué),本篇文章可能太過簡單,并不適合你。

本文的主要內(nèi)容如下:

chrome擴(kuò)展應(yīng)用模塊功能介紹

chrome擴(kuò)展應(yīng)用模塊開發(fā)介紹

本文的內(nèi)容不包括chrome擴(kuò)展應(yīng)用開發(fā)時(shí)提供的各個(gè)API功能詳解,有需求的同學(xué)可以自行查看官方API文檔。

chrome擴(kuò)展應(yīng)用模塊功能介紹

chrome擴(kuò)展應(yīng)用由很多部分組成,其中主要模塊為:

Manifest File

Background Pages

Content Script

Options

為了避免由于翻譯原因?qū)е碌膯栴},因此在下文中對相關(guān)模塊的稱呼一律采用上面的英文。下面,我們先簡單來了解下這些模塊具體是什么作用。

Background Pages
A common need for extensions is to have a single long-running script to manage some task or state. Background pages to the rescue.

從官方的介紹我們可以知道,Background Pages的作用就是在瀏覽器運(yùn)行時(shí),會(huì)長時(shí)間執(zhí)行的腳本。只要瀏覽器處于打開狀態(tài),在Background Pages中的腳本就會(huì)在后臺(tái)執(zhí)行。

Content Script
Content scripts are JavaScript files that run in the context of web pages. By using the standard Document Object Model (DOM), they can read details of the web pages the browser visits, or make changes to them.

從上面官方的介紹我們可以知道,Content Script其實(shí)就是我們需要寫的將會(huì)在我們希望的目標(biāo)頁面中執(zhí)行的腳本文件。每次目標(biāo)頁面刷新時(shí),這部分腳本也會(huì)重新加載執(zhí)行。

Options
To allow users to customize the behavior of your extension, you may wish to provide an options page.

從官方的介紹我們可以了解,Options部分就是我們對于擴(kuò)展的管理功能。我們能夠通過一個(gè)模塊來對chrome擴(kuò)展應(yīng)用的設(shè)置和數(shù)據(jù)進(jìn)行處理。

chrome擴(kuò)展應(yīng)用模塊開發(fā)介紹

首先,讓我們先確定我們插件需要完成的一個(gè)功能,這樣我們就能夠有一個(gè)目標(biāo)示例來進(jìn)行介紹。

以我自己開發(fā)的表情插件為例,它必須具備以下幾項(xiàng)功能:

能夠收集任何網(wǎng)頁的圖片作為表情

能夠在插件中管理已有表情

能夠在特定頁面中將表情發(fā)送出去

我們將上面的功能抽象一下,就能夠得到如下的結(jié)果:

能夠收集保存任何網(wǎng)頁的圖片作為表情(長時(shí)間執(zhí)行腳本監(jiān)聽用戶操作)

能夠在特定頁面中將保存的表情發(fā)送出去(在目標(biāo)頁面中使用腳本與頁面進(jìn)行交互)

能夠在插件中管理已有表情(插件管理相關(guān)功能)

因此,需要完成上述功能,我們就需要用到上面我們提到的功能模塊。下面,讓我們按照模塊來看下,我們應(yīng)該如何實(shí)現(xiàn)這些功能。

配置文件(Manifest File)

首先,在進(jìn)行具體的功能開發(fā)時(shí),我們需要來看下我們的項(xiàng)目配置文件。這個(gè)配置文件在整個(gè)chrome擴(kuò)展應(yīng)用中非常重要,包含了項(xiàng)目的屬性、配置、權(quán)限和資源信息。

{
  "manifest_version": 2,
  "name": "大象表情收藏",
  "description": "大象表情收藏(非官方)",
  "version": "4.15.1",
  "default_locale": "zh_CN",
  "icons": {
    "16": "img/icon16.png",
    "48": "img/icon48.png",
    "128": "img/icon128.png"
  },
  "background": {
    "scripts": [
      "js/background.js"
    ],
    "persistent": false
  },
  "permissions": [
    "",
    "storage",
    "contextMenus"
  ],
  "content_scripts": [
    {
      "css": [
        "js/main.css"
      ],
      "js": [
        "js/favor.js"
      ],
      "matches": [
        "*://x.sankuai.com/*"
      ],
      "run_at": "document_end"
    }
  ],
  "options_page": "options.html",
  "web_accessible_resources": [
    "img/favorite.png",
    "img/left.svg",
    "img/right.svg",
    "img/icon128.png",
    "img/plane.svg",
    "options.html"
  ]
}

這是我開發(fā)的大象表情插件的manifest配置文件,我們通過這個(gè)配置文件來看下相關(guān)的屬性字段。

屬性名稱 屬性含義 備注
manifest_version manifest文件版本
name 項(xiàng)目名稱 發(fā)布到商店時(shí)的名稱。
description 項(xiàng)目簡介 發(fā)布到商店時(shí)的簡介。
version 項(xiàng)目版本 發(fā)布到商店時(shí)需要每次遞增。
default_locale 默認(rèn)的locale目錄 具體見此處。
icons 擴(kuò)展應(yīng)用圖標(biāo) 需要提供16x16,48x48,128x128三種尺寸。
background Background Pages文件
permissions 擴(kuò)展應(yīng)用所需權(quán)限 權(quán)限列表見此處。申請權(quán)限后,可以使用chrome對象來進(jìn)行訪問該權(quán)限提供的API接口。我所開發(fā)的擴(kuò)展應(yīng)用主要是使用到了右鍵菜單和存儲(chǔ)權(quán)限
content_scripts Content Script文件 matches字段表示Content Script文件生效的域名
options_page Options文件
web_accessible_resources 擴(kuò)展需要訪問的本地資源 只用列舉的資源才能夠在擴(kuò)展中通過相對路徑方式訪問。

根據(jù)上面的實(shí)例文件和具體的屬性介紹,相信大家對manifest文件有了一個(gè)具體的了解。下面,我們來具體介紹下我們需要使用的各個(gè)功能模塊。

收集網(wǎng)頁的圖片(Background Pages)

需要收集各個(gè)網(wǎng)頁的圖片,我們需要一個(gè)后臺(tái)常駐的腳本來滿足我們的需求。因此,我們需要使用Background Pages。

根據(jù)前一節(jié)的manifest文件,我們指定了background.js文件作為我們的后臺(tái)常駐腳本,下面讓我們來看下這個(gè)文件的部分示例內(nèi)容。

// 注冊一個(gè)右鍵菜單選項(xiàng)
chrome.runtime.onInstalled.addListener(function () {
    chrome.contextMenus.create({
        "id": "F577D6742FF1A1AB5946A8E5281D5C5D",
        "title": "添加到表情收藏",
        "contexts": ["image"]
    });
});

chrome.contextMenus.onClicked.addListener(function (info, tab) {
    var src = info["srcUrl"];
    // 獲取之前存儲(chǔ)的表情
    chrome.storage.local.get(["newFavorList"], function (items) {
        var newFavorList = items["newFavorList"] || [];
        newFavorList.push(src);
        
        // 存儲(chǔ)所有表情
        chrome.storage.local.set({
            "newFavorList": newFavorList
        });
    });
});

通過上面的例子,我們可以實(shí)現(xiàn)我們的目標(biāo):當(dāng)用戶在任意網(wǎng)頁上面右鍵一張圖片時(shí),右鍵菜單中都會(huì)增加一個(gè)選項(xiàng)——添加到表情收藏。點(diǎn)擊這個(gè)選項(xiàng),我們就能夠?qū)⑦@張圖片存儲(chǔ)到我們的擴(kuò)展應(yīng)用提供的存儲(chǔ)模塊中。

其中,runtimecontextMenus是chrome提供的原生API,相關(guān)API接口可以見此處。

具體效果如下:

發(fā)送保存的表情(Content Script)

當(dāng)我們需要發(fā)送我們已經(jīng)保存的表情時(shí),我們就需要跟頁面進(jìn)行部分功能交互了。這個(gè)時(shí)候,我們需要使用到Content Script。

當(dāng)我們使用Content Script時(shí),我們的執(zhí)行上下文將會(huì)是整個(gè)頁面。因此,我們可以使用JavaScript來操縱DOM節(jié)點(diǎn),和頁面原有的JavaScript進(jìn)行交互。

下面,我們通過jQuery來頁面注入表情面板,同時(shí)使用PostMessage來與原有頁面進(jìn)行數(shù)據(jù)通信。讓我們來看下favor.js文件的部分示例代碼:

chrome.storage.local.get(["newFavorList"], (items) => {
    let favorBox = $("#favorbox");
    favorBox.empty();
    newFavorList = items.newFavorList;


    let emotionPanel = $("
", { class: "smiley-emotion-panel" }); newFavorList.forEach((element) => { if (element && element.url) { emotionPanel.append($("", { class: "icon icon-smiley-emotions", "click": postFavor }).append($("", { "width": "100%", "height": "100%", src: element.url }))); } }); favorBox.append(emotionPanel); }); function postFavor(e) { let src = event.target.getAttribute("src"); window.postMessage({ type: "sendCustomEmotion", text: src }, "*"); }

通過上面的示例代碼,我們可以知道:從Storage中將表情數(shù)據(jù)取出后,立即渲染到頁面中。當(dāng)渲染的表情被點(diǎn)擊時(shí),我們就通過PostMessage將數(shù)據(jù)按照約定的格式發(fā)送即可。

在具體項(xiàng)目中的使用如下圖所示:

這樣,我們就解決了在特定的網(wǎng)頁與頁面的代碼進(jìn)行交互的功能。接下來讓我們來看下我們的“設(shè)置”頁面應(yīng)該怎么開發(fā)。

管理已有表情(Options)

通過Options,我們能夠給chrome擴(kuò)展應(yīng)用開發(fā)一個(gè)“設(shè)置”頁面。當(dāng)我們指定options_page字段后,它的值就是我們的“設(shè)置”頁面。

開發(fā)一個(gè)管理已有表情的options頁面,其實(shí)就是一個(gè)帶有特殊API接口的網(wǎng)頁。我們?nèi)匀荒軌蛲ㄟ^chrome對象來訪問chrome提供的已經(jīng)申請過權(quán)限的API接口。

首先,我們將我們存儲(chǔ)在Storage中的圖片表情數(shù)據(jù)渲染出來,然后提供相關(guān)的操作函數(shù)。options.js部分示例代碼如下:

$scope.remove = function (obj) {
    var result = [];

    $scope.favors.forEach(function (element) {
        if (element.url !== obj.url) {
            result.push(element);
        }
    });
    $scope.favors = result;
    chrome.storage.local.set({
        "newFavorList": $scope.favors
    });
};

如果我們需要在“設(shè)置”頁面刪除后,Content Script頁面立即響應(yīng)應(yīng)該怎么做呢?我們只需要在Content Script中增加Storage監(jiān)聽事件即可。具體代碼示例如下:

chrome.storage.onChanged.addListener((changes) => {
    let newFavorList = changes["newFavorList"];
    
    renderNewValue(newFavorList.newValue);
});

通過在OptionsContent Script增加相關(guān)代碼,我們就能夠完成管理已有表情的功能。具體展示效果如下:

總結(jié)

我們通過一個(gè)簡單的表情插件的例子來快速的介紹了chrome擴(kuò)展應(yīng)用的各個(gè)模塊的功能和開發(fā)方法。通過這篇文章大家應(yīng)該知道了chrome擴(kuò)展應(yīng)用各個(gè)模塊的作用和開發(fā)的方法。

如果大家想對chrome擴(kuò)展應(yīng)用有一個(gè)更加深入的了解,那么建議自己動(dòng)手開發(fā)相關(guān)的功能。這樣才能夠?qū)hrome擴(kuò)展應(yīng)用的相關(guān)邏輯有一個(gè)更加清楚的認(rèn)識。

附錄中提供了部分學(xué)習(xí)相關(guān)的文檔,有興趣的同學(xué)可以自行閱讀。

附錄

chrome官方開發(fā)文檔(英)——建議有英文閱讀能力的人閱讀此文檔。

chrome開發(fā)文檔(中)——閱讀中文文檔時(shí),自動(dòng)忽略“百度”二字即可,同時(shí)建議參考官方文檔一起閱讀。

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/94072.html

相關(guān)文章

  • 科普|物聯(lián)網(wǎng)和大數(shù)據(jù)、云計(jì)算之間的關(guān)系

    摘要:在此文中,我們將討論物聯(lián)網(wǎng),大數(shù)據(jù)和云計(jì)算這三種技術(shù)之間的相互關(guān)系。其背后的原因是大量的物聯(lián)網(wǎng)數(shù)據(jù)生成將為大數(shù)據(jù)系統(tǒng)提供數(shù)據(jù)。因此,對于上述兩點(diǎn),我們明確認(rèn)為需要為物聯(lián)網(wǎng)和大數(shù)據(jù)采用基于云的系統(tǒng)。我們現(xiàn)在的社會(huì)正在步入物聯(lián)網(wǎng)、大數(shù)據(jù)和云計(jì)算時(shí)代。這些技術(shù)中的每一個(gè)都會(huì)有瓶頸,例如可伸縮性差安全性問題以及傳統(tǒng)信息技術(shù)框架中的安裝困難,容錯(cuò)、維護(hù)和性能低下。因此,我們需要利用這些技術(shù)中的每一種來...

    Tecode 評論0 收藏0
  • 分享一個(gè)神器,Selenium 自動(dòng)化測試工具

    摘要:安裝的安裝就不再科普,自行百度。運(yùn)行這段代碼,你會(huì)發(fā)現(xiàn)自動(dòng)打開,并訪問了百度,在輸入框輸入了,緊接著跳轉(zhuǎn)到了搜索的結(jié)果頁。 最近寫項(xiàng)目的時(shí)候,用到了Selenium,一個(gè) Web 端的自動(dòng)化測試工具,直接運(yùn)行在瀏覽器中,用來模擬用戶操作。 Selenium 不僅僅可以用作自動(dòng)化測試,還有很多種玩法,比如 Python 的爬蟲,實(shí)現(xiàn)某商品的秒殺,甚至是頁游外掛腳本,只要是基于瀏覽器操作,...

    jimhs 評論0 收藏0
  • 全球HTTPS時(shí)代已來,你跟上了嗎?

    摘要:而未來的互聯(lián)網(wǎng)網(wǎng)絡(luò)鏈路日趨復(fù)雜,加重了安全事件發(fā)生。蘋果強(qiáng)制開啟標(biāo)準(zhǔn)蘋果宣布年月日起,所有提交到的必須強(qiáng)制開啟安全標(biāo)準(zhǔn),所有連接必須使用加密。最后是安全意識。 互聯(lián)網(wǎng)發(fā)展20多年,大家都習(xí)慣了在瀏覽器地址里輸入HTTP格式的網(wǎng)址。但前兩年,HTTPS逐漸取代HTTP,成為傳輸協(xié)議界的新寵。?早在2014年,由網(wǎng)際網(wǎng)路安全研究組織Internet Security Research Gr...

    hss01248 評論0 收藏0
  • 【全文】狼叔:如何正確的學(xué)習(xí)Node.js

    摘要:感謝大神的免費(fèi)的計(jì)算機(jī)編程類中文書籍收錄并推薦地址,以后在倉庫里更新地址,聲音版全文狼叔如何正確的學(xué)習(xí)簡介現(xiàn)在,越來越多的科技公司和開發(fā)者開始使用開發(fā)各種應(yīng)用。 說明 2017-12-14 我發(fā)了一篇文章《沒用過Node.js,就別瞎逼逼》是因?yàn)橛腥嗽谥跎虾贜ode.js。那篇文章的反響還是相當(dāng)不錯(cuò)的,甚至連著名的hax賀老都很認(rèn)同,下班時(shí)讀那篇文章,竟然坐車的還坐過站了。大家可以很...

    Edison 評論0 收藏0
  • 【全文】狼叔:如何正確的學(xué)習(xí)Node.js

    摘要:感謝大神的免費(fèi)的計(jì)算機(jī)編程類中文書籍收錄并推薦地址,以后在倉庫里更新地址,聲音版全文狼叔如何正確的學(xué)習(xí)簡介現(xiàn)在,越來越多的科技公司和開發(fā)者開始使用開發(fā)各種應(yīng)用。 說明 2017-12-14 我發(fā)了一篇文章《沒用過Node.js,就別瞎逼逼》是因?yàn)橛腥嗽谥跎虾贜ode.js。那篇文章的反響還是相當(dāng)不錯(cuò)的,甚至連著名的hax賀老都很認(rèn)同,下班時(shí)讀那篇文章,竟然坐車的還坐過站了。大家可以很...

    fengxiuping 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<