zoukankan      html  css  js  c++  java
  • 如何开发一个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

  • 相关阅读:
    Python数据结构-链表
    面试题4:替换空格
    面试题3:二维数组中的查找
    2019.12.17基佬出的一道题
    2019.12.17霍格沃兹测试学院一道题
    python_ck01(虚拟环境管理)
    api_DZFPKJ & api_DZFPCX(get_AES_url代码优化)
    cwyth(自动核销代码)
    api_DZFPKJ & api_DZFPCX
    字符串返回数组并排序(算法题)
  • 原文地址:https://www.cnblogs.com/xiangdongsheng/p/13955670.html
Copyright © 2011-2022 走看看