Chrome 插件开发覆写xhr请求

这篇具有很好参考价值的文章主要介绍了Chrome 插件开发覆写xhr请求。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这几天搞chrome谷歌浏览器插件遇到个问题 我想拦截网页请求,并把数据传递到下一个子窗口。获取responsebody内容 background.js 单纯靠sendmessage实现不了通讯

chrome.runtime.sendMessage({data: e.data.responseText,type:'ajaxResponse'});

最开始的时候想用chrome.webRequest.onCompleted.addListener去实现拦截,注入后发现最多只能取到header信息,回调函数里面的对象并不携带responsetext的信息,如果要取到返回值还需要改写xhr请求

chrome.webRequest.onCompleted.addListener(
  function(details) {
    if(details.url.indexOf('https://example.com/')!==-1)
    {
      chrome.cookies.getAll({
        url:"https://example.com/"
      },(cks)=>{
        
      })    

    }
  },
  {urls: ['<all_urls>']},
  ['responseHeaders']
);

上述代码并不能实现取到responsetext的功能

重新整理思路,改写xhr ,首先注入jquery 文件,记得在manifest.json 配置一下


// 等待 jQuery 加载完成
function waitForJQuery() {
    if (typeof $ !== "undefined") {
      // jQuery 已经加载完成,执行你的代码
      $('html').prepend(insertContent);
      window.addEventListener("message",e => {
        //输出返回的值 也可以是其他的处理操作
        console.log(e.data.text);
      });
    } else {
      // jQuery 还没有加载完成,等待 50 毫秒后再次尝试
      setTimeout(waitForJQuery, 50);
    }
  }
  
waitForJQuery();

let injectcode =
`
<script>
(function () {
    console.log("i had injected");
    var XHR = XMLHttpRequest.prototype;
// Remember references to original methods
    var open = XHR.open;
    var send = XHR.send;

// Overwrite native methods
// Collect data:
    XHR.open = function(method, url) {
        this._method = method;
        this._url = url;
        return open.apply(this, arguments);
    };

// Implement "ajaxSuccess" functionality
    XHR.send = function(postData) {
        this.addEventListener('load', function() {   
            if (this._url.toString().indexOf("getCurrentShopOwner")!==(-1)){
                console.log(this._url)
                console.log(this.responseText)
window.postMessage({"responseText":this.responseText,"url":this._url},"*");
            }
            // /* Request y  */ postData
        });
        return send.apply(this, arguments);
    };
})();
</script>
`;

window.addEventListener("message",e => {
    //输出返回的值 也可以是其他的处理操作
    console.log("监听数据"+e.data.responseText);
    chrome.runtime.sendMessage({data: e.data.responseText,type:'ajaxResponse'});
});

$('html').prepend(injectcode);

 下面是manifest.json代码

  "web_accessible_resources": [
    "jquery.min.js"
  ],
  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["/js/content.js","/js/jquery.min.js"],
      "encoding": "utf-8"
    }
  ]

然后在background.js 注册个监听事件


chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
  if (request.type === 'getcookies') {
    chrome.cookies.getAll({
      url: request.url
    }, (cks) => {
      let cookie = cks.map((item) => {
          return item.name + "=" + item.value
        }).join(";") + ";";
      sendResponse(cookie);
    });
    return true; // 必须返回 true,以便异步发送响应
  }
  if (request.type === 'ajaxResponse')
  {
    console.log(request)
    return true;
  }
});

实现效果如下 

Chrome 插件开发覆写xhr请求文章来源地址https://www.toymoban.com/news/detail-513935.html

到了这里,关于Chrome 插件开发覆写xhr请求的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • chrome插件开发实例08- 使用Vue.js开发chrome插件

    目录 背景 演示 功能介绍 插件下载 注意写法:  将  下面的两个插件 改写成vue.js , elementui  实现

    2024年02月13日
    浏览(31)
  • chrome拓展插件开发中使用chrome.storage本地存储

    在扩展程序中本地存储数据可以通过  chrome.storage  API 实现,和 web 中的 localstorage 在某些方面是有区别的,chrome.storage 已经做了优化。 与 localStorage 的区别: 用户数据可以与 chrome 自动同步(通过 storage.sync),只要用户登录了 chrome 账号,则能够全量同步浏览器 扩展程序的脚

    2024年02月01日
    浏览(27)
  • Chrome插件开发教程

    本文将详细介绍如何开发一款Chrome插件,包括插件的介绍、开发配置与调试。不包含插件的发布、审核等内容。 通过阅读本教程,你能够: 了解浏览器器插件,这里专指 Chrome Extension(CE)的基本知识和运行原理 了解如何开发CE的界面和逻辑 调试插件,根据错误信息做出修复

    2024年02月08日
    浏览(32)
  • chrome 插件开发

    参考: https://www.cnblogs.com/amboke/p/16718855.html 设计和实现一个 Chrome 插件提升登录效率_若川的技术博客_51CTO博客 最新版 V3 chrome 插件开发~ demo + 坑 - 掘金  官方文档:https://developer.chrome.com/docs/extensions/

    2024年02月14日
    浏览(28)
  • chrome插件开发实例06-定制自己的Chrome DevTools调试工具

    目录 Chrome DevTools 调试工具 演示 ​编辑 源码  devtools.html devtools.js panel.html

    2024年02月13日
    浏览(31)
  • chrome插件开发实例03-使用 chrome.storage API永久保存数据

    目录 防止数据丢失 使用chrome.storage API 功能 功能演示 源代码 manifest.json

    2024年02月14日
    浏览(26)
  • 如何开发一个chrome浏览器插件

    目录 前言 chrome扩展程序 文件结构 manifest.json html和css js 加载插件 调试 总结 当前,chrome浏览器早已成为占据最大的市场份额,也是综合体验最好的浏览器,开发人员使用的浏览器基本都以它为主。 我在使用chrome的过程中,积累增加了很多书签,最多的时候接近上千个,后续

    2024年02月08日
    浏览(37)
  • 【chrome扩展开发】如何在项目中判断插件是否已安装

    由于安全限制,本文采取间接的方式实现 比如通过cookie、localStorage等进行状态存储 在 background.js 中进行安装、卸载事件监听 Ps: management 权限的监听事件,似乎无法对安装、卸载起到作用,具体原因不清楚,还有待研究。 有兴趣的小伙伴也可以研究研究,官方文档地址:

    2024年02月11日
    浏览(28)
  • chrome插件开发实例07- Vue调试插件vue-devtools

    目录 一、为什么使用vue-devtools插件 二、如何安装 三、使用源码方式,安装Vue-devtools插件

    2024年02月13日
    浏览(35)
  • chrome浏览器开发者工具network面板过滤、隐藏指定的请求

    在我的这篇文章中介绍了,怎么在开发者工具network面板中屏蔽请求,但是屏蔽请求的意思是这个请求不会再发出去,如果是功能性请求,直接屏蔽掉会影响功能,所以我们一般很少用到。 我们常用的方法其实是过滤、隐藏请求,所有的请求都照常发送,但是不展示。 方法很

    2024年02月13日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包