如何开发一个Google插件-以下载亚马逊商品主图为例

1.定义全局配置 manifest.json

{
  "name": "AmazonImageAssistant", // 插件名称
  "description" : "Download", // 插件描述
  "version": "1.0", // 插件版本
  "manifest_version": 2, // 配置版本
  "icons":
  {
    "16": "icons.png", // 插件logo
    "48": "icons.png",
    "128": "icons.png"
  },
  "browser_action": {
    "default_icon": "logo.png" // 浏览器右上角图标
  },
  "background": {
    "scripts": ["background.js"] // 这里的js无法操作目标网页的dom
  },
  "permissions": ["contextMenus"],
  "content_scripts":
  [
    {
      "matches": ["http://*/*", "https://*/*"], 
      "js": ["content-script.js", "jquery-2.1.1.min.js"], // 引入自己定义的一些js文件,这里的js可以操作目标网页的dom
      "run_at": "document_start"
    }
  ]
}

 

2.编写background.js,在鼠标右键菜单栏目增加 “下载主图“ 项,

 

 

 

//-------------------- 右键菜单演示 ------------------------//
chrome.contextMenus.create({
    title: "下载主图",
    onclick: function(info, tab){
        console.log('tab'); //目标网页的标签对象,tab.id,标签的标识, function是content-script.js响应的回调
        chrome.tabs.sendMessage(tab.id, {'contextMenuId': info.menuItemId, 'info': info}, function(response) { // 通知content-scripts.js执行主图下载操作,因为backround.js无法操作目标网页dom,所以必须与content-script.js文件通信,间接操作目标网页
            console.log(response);
        });
    }
});

3.引入jquery

将jquery文件放在自定义目录,路径必须与manifes.json配置中的一致

 

4.编写content-scripts.js 监听background.js的操作命令,并执行响应操作,并通过发送方法响应background.js请求,我这里不返回具体数据,直接执行图片下载操作

chrome.extension.onMessage.addListener(function(request, sender, response) {
    var imageUrl = $("#imgTagWrapperId>img").attr("data-old-hires");

    console.log('old-image: ' + imageUrl);
    imageUrl = imageUrl.replace(/\._.+_\./, '._1000_.');
    var urlArr = imageUrl.split('?');
    var k = urlArr[0], appU = k.split('/');
    var L = appU[appU.length - 1];
    // window.open(imageUrl,'_blank','');
    downFile(imageUrl, L);
    return true; // 这里必须返回true,否则报错:The message port closed before a response was received.
});


function downFile (imgsrc, name) { //下载图片地址和图片名
    let image = new Image();
    // 解决跨域 Canvas 污染问题
    image.setAttribute("crossOrigin", "anonymous");
    image.onload = function() {
        let canvas = document.createElement("canvas");
        canvas.width = image.width;
        canvas.height = image.height;
        let context = canvas.getContext("2d");
        context.drawImage(image, 0, 0, image.width, image.height);
        let url = canvas.toDataURL("image/png"); //得到图片的base64编码数据
        let a = document.createElement("a"); // 生成一个a元素
        let event = new MouseEvent("click"); // 创建一个单击事件
        a.download = name || "photo"; // 设置图片名称
        a.href = url; // 将生成的URL设置为a.href属性
        a.dispatchEvent(event); // 触发a的单击事件
    };
    image.src = imgsrc;
}

5.将写好的插件加载到浏览器中,必须开启开发者模式

  

 

 

6.测试,邮件单击目标网页,出现下载主图菜单,执行下载功能。

 

 

 

 这里借鉴了大佬们的总结:

https://www.jianshu.com/p/0540bc121303

https://www.jianshu.com/p/51c650f98d9c

https://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html#%E6%9C%80%E7%AE%80%E5%8D%95%E7%9A%84%E5%8F%B3%E9%94%AE%E8%8F%9C%E5%8D%95%E7%A4%BA%E4%BE%8B

posted @ 2020-11-10 19:58  coder_xds  阅读(429)  评论(0编辑  收藏  举报