Chrome(谷歌)插件开发 监听网站的异步请求

news/2024/5/9 21:55:35/文章来源:https://blog.csdn.net/huyande123/article/details/124670731

为什么要开发这样的一个插件:微信小程序用户反馈 不能知道那些问题是被回复了以及回复了什么内容,所以需要去监听这个网站的回复内容。由于它的客服系统获取聊天信息都是异步的,可以通过监听网站的异步请求 获取到参数、响应结果,用于处理这块的业务信息。

插件下载

谷歌插件学习监听网络请求-Javascript文档类资源-CSDN下载

业务流程 

 监听ajax请求的核心代码

main.js

;(function () {if ( typeof window.CustomEvent === "function" ) return false;function CustomEvent ( event, params ) {params = params || { bubbles: false, cancelable: false, detail: undefined };var evt = document.createEvent( 'CustomEvent' );evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );return evt;}   CustomEvent.prototype = window.Event.prototype;   window.CustomEvent = CustomEvent;
})();
;(function () {function ajaxEventTrigger(event) {var ajaxEvent = new CustomEvent(event, { detail: {readyState:this.readyState,responseURL:this.responseURL,status:this.status,response:this.response,orignUrl:this.orignUrl,body:this.body,method:this.method} });window.dispatchEvent(ajaxEvent);}var oldXHR = window.XMLHttpRequest;function newXHR() {var realXHR = new oldXHR();realXHR.addEventListener('abort', function () { ajaxEventTrigger.call(this, 'ajaxAbort'); }, false);realXHR.addEventListener('error', function () { ajaxEventTrigger.call(this, 'ajaxError'); }, false);realXHR.addEventListener('load', function () { ajaxEventTrigger.call(this, 'ajaxLoad'); }, false);realXHR.addEventListener('loadstart', function () { ajaxEventTrigger.call(this, 'ajaxLoadStart'); }, false);realXHR.addEventListener('progress', function () { ajaxEventTrigger.call(this, 'ajaxProgress'); }, false);realXHR.addEventListener('timeout', function () { ajaxEventTrigger.call(this, 'ajaxTimeout'); }, false);realXHR.addEventListener('loadend', function () { ajaxEventTrigger.call(this, 'ajaxLoadEnd'); }, false);realXHR.addEventListener('readystatechange', function() { ajaxEventTrigger.call(this, 'ajaxReadyStateChange'); }, false);let send = realXHR.send;realXHR.send = function(...arg){send.apply(realXHR,arg);realXHR.body = arg[0];ajaxEventTrigger.call(realXHR, 'ajaxSend');}let open = realXHR.open;realXHR.open = function(...arg){open.apply(realXHR,arg)realXHR.method = arg[0];realXHR.orignUrl = arg[1];realXHR.async = arg[2];ajaxEventTrigger.call(realXHR, 'ajaxOpen');}let setRequestHeader = realXHR.setRequestHeader;realXHR.requestHeader = {};realXHR.setRequestHeader = function(name, value){realXHR.requestHeader[name] = value;setRequestHeader.call(realXHR,name,value)}return realXHR;}window.XMLHttpRequest = newXHR;
})();

manifest.json

{"manifest_version": 3,"name": "采集助手","description": "xxxxxx","version": "1.0","action": {"default_icon": "icon.png","default_popup": "popup.html"},"permissions": ["tabs","activeTab","storage","webRequest"],"host_permissions": ["*://*/*","http://*/*","https://*/*","https://back.welife001.com/"],"background": {"service_worker": "background.js"},"content_scripts": [    {"matches": ["https://xxxx/*"], //替换自己需要监听的网站地址   "js": ["auto.js","jquery-2.0.0.min.js"],		"run_at": "document_start"}],"web_accessible_resources": [{ "resources": ["pageScripts/defaultSettings.js","pageScripts/main.js"],"matches": ["https://xxxx/*"] //替换自己需要监听的网站地址}]
}

auto.js

// 在页面上插入代码const script = document.createElement('script');
script.setAttribute('type', 'text/javascript');
script.setAttribute('src', chrome.runtime.getURL('pageScripts/main.js'));
document.documentElement.appendChild(script);script.addEventListener('load', () => {// postMessage({type: 'ajaxInterceptor', to: 'pageScript', key: 'ajaxInterceptor_switchOn', value: true});// postMessage({type: 'ajaxInterceptor', to: 'pageScript', key: 'ajaxInterceptor_rules', value: ['action=get_room_msg']});const meta = document.createElement('meta');meta.setAttribute('http-equiv', 'Content-Security-Policy');meta.setAttribute('content', 'upgrade-insecure-requests');document.getElementsByTagName('head')[0].prepend(meta);console.log('jiazai')
});//写自己的业务逻辑代码
window.addEventListener("ajaxReadyStateChange",function(e){let xhr = e.detail;if(xhr && xhr.readyState == 4 && xhr.status == 200){// xhr.getAllResponseHeaders()  响应头信息// xhr.requestHeader            请求头信息// xhr.responseURL              请求的地址// xhr.responseText             响应内容// xhr.orignUrl                 请求的原始参数地址// xhr.body                     post参数,(get参数在url上面)//判断请求分别是什么动作if(xhr.orignUrl.includes('get_room_info')){ //获取用户聊天室详情dealChatInfo(xhr.response)}else if(xhr.orignUrl.includes('get_room_msg')){ //获取用户聊天列表//解析请求的参数 用来判断是刷新请求还是 获取历史聊天let param  = JSON.parse(xhr.body)if(param.op == 0){//获取历史聊天dealChatResponse(xhr.response,param.op)}else if(param.op == 1){//刷新请求if(xhr.response.list.length>0){//有聊天内容 才去同步dealChatResponse(xhr.response,param.op)}}}else if(xhr.orignUrl.includes('send_room_msg')){ //客服回复内容dealChatSend(xhr.response,xhr.body)}// console.log(xhr);}
});
/*** 同步聊天信息* @param {*} response * @param {*} op */
function dealChatResponse(response,op){// console.log('聊天列表',response)chrome.storage.local.get(['room_attr'], function(result) {if(result){let user_head_img = result.room_attr.user_head_imglet list = response.list// console.log(user_head_img)$.ajax({url: "xxx",type: "post",data:{list:list,op:op,head_url:user_head_img},dataType: "json"}).done(function(msg) {console.log( '同步消息成功',msg)}).fail(function(jqXHR, textStatus) {console.log( '同步消息失败')});}});}/*** 获取聊天室详情,需要将客服的信息保存起来* @param {*} response */
function dealChatInfo(response){// console.log('聊天室详情',response)//保存聊天室详情chrome.storage.local.set({'room_attr': response.room_attr}, function() {});
}
/*** 处理客服发送消息* @param {*} response * @param {*} body */
function dealChatSend(response,body){// console.log('发送消息',JSON.parse(body))let json_body = JSON.parse(body);chrome.storage.local.get(['room_attr'], function(result) {if(result){let extra_info = json_body.extra_infolet msg_content = json_body.msg_contentlet user_head_img = result.room_attr.user_head_imglet msg_type = json_body.msg_type$.ajax({url: "xxx",type: "post",data:{extra_info:extra_info,msg_content:msg_content,head_url:user_head_img,msg_type:msg_type},dataType: "json"}).done(function(msg) {console.log( '发送消息成功',msg)}).fail(function(jqXHR, textStatus) {console.log( '发送消息失败')});}});
}

参考

  • https://www.cnblogs.com/fbj333/p/15709444.html
  • https://blog.csdn.net/joy1793/article/details/109364821
  • https://blog.csdn.net/Nieyigo/article/details/116482585

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_700682.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java项目:旅游网站管理系统设计和实现(java+springboot+jsp+mysql+spring)

源码获取:博客首页 "资源" 里下载! 运行环境: java jdk 1.8 IDE环境: IDEA tomcat环境: Tomcat 7.x,8.x,9.x版本均可 主要功能说明: 管理员角色包含以下功能:管理员登录,用户管理,旅游路线管理,…

Java项目:家政服务网站系统设计和实现(java+Springboot+ssm+mysql+jsp+maven)

源码获取:博客首页 "资源" 里下载! 一、项目简述 本系统主要实现的功能有: 项目功能较多,包括用户的注册登录,家政0员务的查看, 分类,预订,以及支付,订单信息…

页面布局让footer居页面底部_网站各页面该如何布局关键词优化提升排名?

在网站优化中,最值得关注的一个事情就是关键词的布局,因为关键词的布局直接影响着网站的排名。那么怎样布局关键词才能提高页面和关键词的相关性,并提高网站排名呢?下面一起来看看。一、利用HTML标签布局关键词众所周知&#xff0…

Java项目:在线美食网站系统(java+SSM+jsp+mysql+maven)

源码获取:博客首页 "资源" 里下载! 一、项目简述 功能:用户的注册登录,美食浏览,美食文化,收藏百 科,趣味问答,食谱等等功能等等。 二、项目运行 环境配置:…

关于大型网站技术演进的思考(五)--存储的瓶颈(5)

上文里我遗留了两个问题,一个问题是数据库做了水平拆分以后,如果我们对主键的设计采取一种均匀分布的策略,那么它对于被水平拆分出的表后续的查询操作将有何种影响,第二个问题就是水平拆分的扩容问题。这两个问题在深入下去&#…

5个在线调试代码的网站

对于编程开发的人来说,有个快速测试代码的地方是非常方便重要的,这里,我们收集了5个很好用的在线调试网站。 1.codepad 是一款简单的在线 IDE 编辑器服务,你只需要把代码粘贴进去就可以编译运行了,连工程也不需要新建&…

[转载]从100PV到1亿级PV网站架构演变

首页最新文章在线课程业界开发IT技术设计创业IT职场投稿更多 - 导航条 -首页最新文章在线课程业界开发- Web前端- Python- Android- iOS- Java- C/C- PHP- Ruby- GoIT技术- Linux- UNIX- MySQL- NoSQL- 数据库- Git- 算法- 测试- 信息安全- Vim设计- 网页设计- UI设计- 交互设计…

1h2g云服务器做网站,云服务器1h2g

云服务器1h2g 内容精选换一换IP地址组是多个IP地址的集合,可被安全组规则引用,可统一管理具有相同安全要求或需要频繁修改的IP地址。通过使用IP地址组,可有效应对需要重复多次编辑安全组规则的场景,方便管理。您需要先创建一个IP地…

VS2013自带的Browser Link功能引发浏览localhost网站时不停的轮询

浏览localhost网站时候不管你打开那个页面它都会不停的轮询。据悉这是VS2013自带的Browser Link功能,里面用到SignalR机制什么是Browser Link功能,什么是SignalR机制大家可以没事去百度了解一下。Browser Link功能讲解地址:http://www.cxyclu…

method=post 怎么让查看源代码看不到_网站文档不能复制怎么办?教你3个小妙招,1分钟轻松化解...

不知道大家平常在查找资料时,碰到网页资料不能下载时,是怎么样进行处理的。那么笔者今天就来分享我查找不能复制文档时,所用的3个小妙招,帮助轻松化解,一起来看看吧。1、保存网页当我们遇到一个不能直接复制的文档&…

自定义html托管,10分钟搞定“傻瓜式”的静态网站搭建托管之旅

原文发布于微信公众号:腾讯云存储(关注有惊喜)静态网站:有别于动态网站,它就是只包含静态内容(如图片、音频、视频、HTML、CSS、JS)的网站,不依赖服务器端动态渲染页面。那么静态网站托管应该如何使用呢?今天就和大家分…

idea运行jsp显示源码_基于jsp+mysql+Spring+mybatis的SSM在线个人PC电脑商城平台网站系统...

运行环境: 最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。IDE环境: Eclipse,Myeclipse,IDEA都可以tomcat环境: Tomcat 7.x,8.x,9.x版本均可硬件环境: windows 7/8/10 1G内存以上主要功能说明: 管…

埃森哲java开发怎么样_花费2亿,耗时2年,网站还没建完,咨询公司埃森哲被告上法庭!...

本文作者:靠谱的小灶君全文共3158字,预计阅读8分钟耗费2个多亿,耗时2年多连一个可用的网站都无法交付想要完工?那就再交1000万美元美国汽车租赁公司赫兹(Hertz)一怒之下将知名咨询公司埃森哲告上法庭*Hertz 诉讼部分截图“坑爹啊&#xff0c…

网站收录工具(php导航自动收录源码)_网站如何快速收录,网站不收录怎么办?...

经常有朋友说怎么快速收录,网站不收录怎么收录??其实,网站不包括一般的新网站数量,没有SEO基础,SEO了解合作伙伴经常会遇到问题,甚至很多人会告诉你,不包括网站引流,导致…

编写纳新网站后端的相关知识总结

使用HSSFWorkbook导出数据库中的数据 导入Apache POI Maven jar包 <!-- Apache POI --> <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.6</version> </dependency>在控制层编…

qq浏览器网页翻译_科研利器 | NCBI网站影响因子与网页翻译插件安装指南

小编说在平时的科研工作中&#xff0c;善用各类工具能帮助我们提升科研效率&#xff0c;而浏览器的插件与各类软件相比&#xff0c;更加便捷、并且不会占用电脑内存。今天推荐两款浏览器增强插件&#xff0c;提高效率妥妥的~Scholarscope1、进入官网https://www.scholarscope.c…

c语言可视化_这些算法可视化网站助你轻松学算法

前言无疑&#xff0c;数据结构与算法学习最大的难点之一就是如何在脑中形象化其抽象的逻辑步骤。而图像在很多时候能够大大帮助我们理解其对应的抽象化的东西&#xff0c;而如果这个图像还是我们自己一点点画出来的&#xff0c;那么无疑这个印象是最深刻的了。没错&#xff0c;…

网站信息统计的简单实现过程

作者&#xff1a; pcskySQL语句如下&#xff1a; SELECT DD.SumHits, AA.CountArt, CC.WeekUpdate, BB.RegUserNumFROM(SELECT COUNT(newsid) AS CountArt FROM article) AA,(SELECT COUNT(id) AS RegUserNum FROM Admin) BB,(SELECT COUNT(newsid) AS WeekUpdate FROM(articl…

艾宾浩斯计划表自动生成网站_施工进度计划表横道图,自动出图超方便,建议收藏...

横道图&#xff0c;是一种非常实用的图表类型。施工进度计划的制定在工程项目里是很重要的&#xff0c;这可以大大提高施工单位的管理水平&#xff0c;是项目施工必备。作为一个在工地摸爬滚打好几年的人来说&#xff0c;这些更是不可或缺的。几年下来&#xff0c;也整理了好多…

emoji 乱码_这个自制emoji的网站,让你成为永远不输的斗图王者

作为表情界的元老级人物&#xff0c;不管是苹果官网输入法、微信官方表情还是各个主流输入法里&#xff0c;我们都可以从里面找到大量 emoji 表情。然鹅……就算这么多表情&#xff0c;小帮每次发 emoji 时还有有些选择困难。因为翻遍所有表情&#xff0c;都没法找到合适的啊&a…