三十功名尘与土

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3031|回复: 1

Chome extensions 开发入门(随便版)

[复制链接]

9

主题

9

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
39946
发表于 2022-12-8 17:06:00 | 显示全部楼层 |阅读模式
要想学习Chome extensions 开发,至少要拥有html、css、JavaScript的基础。如果你有vue的基础更好了,没有就将就看看吧,我也是随便写的。本次使用vue搭建,主要是偷懒不想自己写ui,所以用了elm的UI。好了,废话不多说了,上代码。
一、首先通过vite搭建一个vue项目
具体步骤可以参考:https://cn.vuejs.org/ 官网。
npm init vue@latest
  • 然后开始下一步,需要的就要,不需要的就不要,比如,路由、大菠萝等,如果是简单的项目,我觉得没有必要用。根据自己的需求来。
  • 然后安装elmUI,参考官网:https://element-plus.org/zh-CN/#/zh-CN

二、创建项目清单。
目前Chome extensions 的清单已经升级到了3的版本,官方说了一大堆3的好处,比如
Manifest V3 代表了扩展平台自十年前推出以来最重大的转变之一。Manifest V3 扩展在安全性、隐私和性能方面得到增强;他们还可以使用更现代的开放网络技术,例如 service workers 和 promises。
1、新建清单
  • 在vue项目的的public目录下,新建一个  manifest.json 文件,名字就是manifest的json格式文件,必要问为什么是这个,人家规定就是这个,不能变。
  • 这个文件和package.json、android的清单文件、springboot的配置文件等作用一样重要,包括想获取什么权限都要在这里申请配置。

2、清单的常见说明
  • manifest_version:这是清单的版本,以前是2,现在是3,建议使用3吧。
  • name:你的项目名称,你爱填啥都可以。
  • version:你的项目版本,可以随便填,你可以填写1.0.0 或者0.0.1都行。
  • description:你的项目简介,爱填啥都行。
  • icons:你的拓展管理页面的图标,对就是下面那个玩意儿。

[img=0,222]https://cdn.nlark.com/yuque/0/2022/png/199557/1670487636760-eba9ce7d-96e9-4cfd-8add-80f42b3fafb9.png#averageHue=%23fdfdfc&clientId=u283111f1-0708-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=222&id=uaf117f2d&margin=[object%20Object]&name=image.png&originHeight=278&originWidth=518&originalType=binary&ratio=1&rotation=0&showTitle=false&size=23464&status=done&style=none&taskId=u6f3e20c0-ebe7-464b-a13a-111e71b19e1&title=&width=414.4[/img]
    "icons": {
        "16": "icon/icon_16.png",
        "32": "icon/icon_32.png",
        "64": "icon/icon_64.png",
        "128": "icon/icon_128.png",
        "256": "icon/icon_256.png"
    },
  • action:

    • default_icon:这是工具栏默认的图标,你可以和上面的设置一样
    • default_title:这个就是你鼠标放在工具栏图标上面显示的内容。
    • default_popup:当用户单击工具栏中扩展的操作按钮时,将显示操作的弹出窗口界面页。


    "action": {

        "default_icon": {
            "16": "icon/icon_16.png",
            "32": "icon/icon_32.png",
            "64": "icon/icon_64.png",
            "128": "icon/icon_128.png",
            "256": "icon/icon_256.png"
        },

        "default_title": "来啊,点击我啊",
        "default_popup": "index.html"
    },
  • background:后台执行的,在linux上相当于守护进程,在android中相当于Service角色一样。

    • service_worker:指定你这个后台执行的程序是那个文件,一般设置background.js不强制,填啥都行。
    • type:额外的字段"type": "module"以将服务工作者作为 ES 模块包含在内,这使您可以import进一步编写代码



    "background": {
        "service_worker": "js/background.js",
        "type": "module"
    },
  • host_permissions: 如果您想要请求仅在运行时发现的主机,那么这里就填写 "https://*/"

"host_permissions": [
        "*://*/*"
    ],
  • permissions: 你要申请的权限,比如你要想获取cookie,你想要使用本地存储等功能,都需要申请,和android一样,毕竟都是一家公司开发的东西。

    "permissions": [
        "cookies","storage","webRequest"
    ],
  • content_scripts :内容脚本是在网页上下文中运行的文件。通过使用标准文档对象模型(DOM),他们能够读取浏览器访问的网页的详细信息,对其进行更改,并将信息传递给其父扩展。比如往你想要的页面添加一个按钮,或者模拟http请求获取你想要的数据,或者发送http给你的服务器一些数据都可以的。

     "content_scripts": [
       {
         "matches": ["https://*.github.com/*","http://*/*"],
           "css" :["css/content.css"],
         "js": ["js/content-script.js"]
       }
     ]
清单太多了,自己想要的可以参考文档:https://developer.chrome.com/docs/extensions/mv3/manifest/上面的 icon 、js目录都是在public目录下,用vite打包之后可以直接使用。

三、实战一,使用专属API来获取cookie
比如我们在default_popup有一个按钮,我们想点击这个按钮之后可以获取cookie。你可能惊呆了,我们用 document.cookie 就能够获取cookie了,干嘛要用这个拓展插件呢?那是因为你只知道cookie有key和value两个属性吧,这个其他的属性建议你搜索引擎一下。点击之后,我们发送一个事件,
<el-button type="primary" size="small" @click="getCookie">获取cookie</el-button>
getCookie(){
  chrome.runtime.sendMessage({type:"readCookie"}).then(res=>{
    console.log(res.cookie); //这里就是从service_worker脚本反馈过来的内容。
  })
}
因为我们不能直接获取cookie,只能通过service_worker设置的脚本回去,chrome.runtime.sendMessage 就是告诉后台脚本(使用chrome.runtime.onMessage.addListener监听),我们要干的事情,至于是什么事情,传一个对象过去type:"readCookie"},然后再接收的时候,就能接收到这个对象了。

//chrome.runtime.onMessage.addListener能监听你的发送消息,
chrome.runtime.onMessage.addListener(
        function(request, sender, sendResponse) {
   let type =  request.type;
    if(type=="readCookie"){
      //读取cookie。在读取cookie之前,一定要再清单(permissions)中申请cookie权限

       /**
            chrome.cookies.getAll({domain: ".dianping.com"},(cookie)=>{
        
                //这里就是全部的cookie,入股指向获取某个那么可以用get,不用getAll
          //入股不想用地狱回调,可以使用async 和  await配合使用
         
        console.log(cookie);
      });
     */
        //这里应该封装在一个async函数,懒得写了。
        let cookies = await chrome.cookies.getAll({
                                         domain: ".dianping.com"
                                 });
      //响应一个对象给请求事件。
                        sendResponse({"cookie":cookies});
      
    }
  }
}

四、网页中嵌入脚本定时请求数据
在content_scripts 我们定义了matches和jsmatches:表示可以请求那些域名的数据,类似有点跨域,只是类似。js就是你要在那个页面嵌入的脚本,比如你想在https://mp.weixin.qq.com/这个网站中获取粉丝列表,那么就需要在matches这么填写 "https://mp.weixin.qq.com/"  或者所有的 "http:///",content-script.js 就是你要嵌入的脚本,content.css就是你要嵌入的css样式。
"content_scripts": [
           {
             "matches": ["https://mp.weixin.qq.com/*","http://*/*"],
                   "css" :["css/content.css"],
             "js": ["js/content-script.js"]
           }
         ]
这样你可以再content-script.js中,import axios 进来,然后使用要给定时器开始卡卡卡的请求数据,卡卡卡的爬取数据了,(爬虫可能违法,此教程知识用来学习,不教唆别人违法)。
总结:恭喜看到这里你从一个小白,入门了chrome 拓展开发,想要精进,那么就自己去看文档吧:https://developer.chrome.com/docs/extensions/


回复

使用道具 举报

12

主题

52

帖子

134

积分

注册会员

Rank: 2

积分
134
发表于 7 天前 | 显示全部楼层
ritonavir will increase the level or effect of hydrocortisone by affecting hepatic intestinal enzyme CYP3A4 metabolism <a href=https://fastpriligy.top/>buy priligy in uae</a> ISSN 0006 4971 Print 0006 4971 Linking
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|三十功名尘与土

GMT+8, 2024-11-24 09:32 , Processed in 0.060276 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表