快上車,chrome擴(kuò)展帶你看福利

今天偶然看到 用技術(shù)方式炸魚 很感興趣。一則最近也在看web的東西,二則前段時(shí)間scrapy爬取的圖片不是很方便去查看。因此決定決定照葫蘆畫瓢,嘗試著從零寫一個(gè)chrome 擴(kuò)展。

參考資料

網(wǎng)上這方面的資料還挺多,我參考的是:https://github.com/sxei/chrome-plugin-demo
從零開始怎么去寫擴(kuò)展,看完基本上可以完成一個(gè)簡(jiǎn)單的擴(kuò)展,其余自定義的地方需要一點(diǎn)點(diǎn)時(shí)間研究。

擴(kuò)展演示:

使用步驟:

  1. 安裝擴(kuò)展:打開chrome擴(kuò)展頁(yè), 將擴(kuò)展包(下載地址)解壓并拖到擴(kuò)展頁(yè)安裝,
    image.png

    右上角出現(xiàn)孔雀圖標(biāo),安裝成功。
  2. 繼續(xù)上次的福利,如何拍好私房照。
    打開上述頁(yè)面,左上角出現(xiàn)圖標(biāo)開關(guān)。點(diǎn)擊即可查看,再次點(diǎn)擊即可關(guān)閉。
    image.png
  3. 注意:由于下拉刷新的緣故,網(wǎng)頁(yè)不會(huì)一次返回本答案的全部圖片。
    一次加載的圖片看完,可手動(dòng)下拉刷新,點(diǎn)擊圖標(biāo)繼續(xù)瀏覽圖片。
image.png

開發(fā)步驟:

看完上面的鏈接,大概知道擴(kuò)展的本目錄結(jié)構(gòu),我的如下:

image.png

最重要的文件:manifest.json。
manifest2.json是上述帶解釋的配置文件,方便對(duì)照。

{
  "name": "zhihuimage",
  "description": "zhihuimage",
  "version": "1.0",
  "manifest_version": 2,
  "browser_action": {
    "default_popup": "html/zhihu.html",
    "default_icon": "img/ic_launcher.png"
  },
  "icons": {
    "16": "img/ic_launcher.png",
    "48": "img/ic_launcher.png",
    "128": "img/ic_launcher.png"
  },
  // 會(huì)一直常駐的后臺(tái)js或者頁(yè)面
  "background": {
    // 2種指定方式,如果指定JS,那么會(huì)自動(dòng)生成一個(gè)背景頁(yè)
    "page": "html/zhihu.html"
    //"scripts": ["js/background.js"]
  },
  "content_scripts": [
    {
      "matches": ["https://www.zhihu.com/question/*"],
      "js":["js/content_script.js"],
      "css":["css/zhihu.css"]
    }
  ],
  "commands": {
    "_execute_browser_action": {
      "suggested_key": {
        "default": "Ctrl+Shift+E",
        "mac": "MacCtrl+Shift+E"
      },
      "description": "open html"
    }
  },
  // 普通頁(yè)面能夠直接訪問的插件資源列表,如果不設(shè)置是無法直接訪問的
  "web_accessible_resources": [
    "js/inject.js",
    "img/ic_launcher.png"
  ]
}

對(duì)照另一個(gè)文件即可看懂。

下面是content_script.js文件:
擴(kuò)展比較簡(jiǎn)單,思路就是在body插入一個(gè)div元素,里面放置圖片,形成列表。

//操作document
let div_str = '<div class="zhihu-image">\n' +
    '            <div class="zhihu-image-inner"></div>\n' +
    '        </div>'

let node = document.createElement("div")
let img = document.createElement("img")
img.src = chrome.extension.getURL("img/ic_launcher.png");
img.alt = "zhihu"
img.title = "zhihu"
img.classList = "zhihu"
img.addEventListener("click", () => {
    // 點(diǎn)擊事件
    console.log("click")
    loadImg()
})
node.appendChild(img)
document.body.appendChild(node)


let imageNode = document.createElement("div")
imageNode.innerHTML = div_str
imageNode.getElementsByClassName("zhihu-image")[0].hidden = true
document.body.appendChild(imageNode)


const loadImg = () => {
    let node = document.getElementsByClassName("zhihu-image-inner")[0]
    let nodeHidden = document.getElementsByClassName("zhihu-image")[0]
    console.log(node.hidden)
    if (nodeHidden.hidden === true) {
        nodeHidden.hidden = false
        console.log(node)
        images = document.querySelectorAll("span > figure > span > div")
        console.log(images)
        for(i = 0; i < images.length; i++) {
            let img = document.createElement("img")
            img.src = images[i].dataset.src
            img.className = "image"
            node.appendChild(img)
        }
    } else {
        nodeHidden.hidden = true

    }
}

這是content-script.js全部代碼,css見文末github。

全部完成,現(xiàn)在可以編寫自己的擴(kuò)展了。
涉及到不用頁(yè)面見通信,background屬性的應(yīng)用,請(qǐng)查看官方文檔。

微信:youquwen1226
github: https://github.com/yunshuipiao/zhihu-image-chrome-extension

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容