当前位置:   article > 正文

chrome插件开发实例05-拦截页面请求_chrome插件开发拦截页面请求

chrome插件开发拦截页面请求

目录

功能

演示

 源代码下载

manifest.json

devtools.html

devtools.js

background.js


功能

拦截任意打开页面的请求信息,包括:URL,参数,请求方式method, 返回status,返回体大小,返回原始内容

演示

 

 源代码下载

https://download.csdn.net/download/wodeyijia911/88180871

manifest.json

  1. {
  2. "name": "chromepulgin",
  3. "version": "1.0.0",
  4. "minimum_chrome_version": "10.0",
  5. "description": "chrome devtools",
  6. "manifest_version": 2,
  7. // devtools页面入口,注意只能指向一个HTML文件,不能是JS文件
  8. "devtools_page": "devtools.html",
  9. "content_scripts": [
  10. {
  11. "matches": ["*://*/*"],
  12. "css": [],
  13. "js": ["scripts/axios.min.js","scripts/vue.min.js", "content_scripts.js"]
  14. }
  15. ],
  16. "background": {
  17. "scripts": [
  18. "scripts/background.js" //指定了scripts属性,则Chrome会在扩展启动时自动创建一个包含所有指定脚本的页面
  19. ],
  20. "persistent": true //定义了常驻后台的方式——当其值为true时,表示扩展将一直在后台运行,无论其是否正在工作
  21. },
  22. "permissions": [
  23. "webRequest",
  24. "webRequestBlocking",
  25. "storage",
  26. "tabs",
  27. "http://*/*",
  28. "https://*/*",
  29. "contextMenus",
  30. "chrome://favicon/"
  31. ],
  32. "content_security_policy": "style-src 'self' 'unsafe-inline' https://unpkg.com;script-src 'self' 'unsafe-eval' https://cdn.bootcss.com;object-src 'self' ;",
  33. "icons": {
  34. },
  35. "browser_action": {
  36. // "default_icon": "img/chrome01.png",
  37. // "default_popup": "popup.html",
  38. // "default_title": "magic"
  39. }
  40. }

devtools.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <script src="scripts/jquery-3.5.1.min.js"></script>
  9. <script type="text/javascript" src="js/devtools.js"></script>
  10. </body>
  11. </html>

devtools.js

ps: devtools.js 类似popup.js, 可以直接调用background.js中的函数

chrome.webRequest.*API 均不能获取请求返回的内容。

  1. const CD = chrome.devtools;
  2. // Chrome DevTools Extension中不能使用console.log
  3. const log = (...params) => CD.inspectedWindow.eval(`console.log(...${JSON.stringify(params)})`);
  4. log('devtools.js log........');
  5. chrome.devtools.network.onRequestFinished.addListener(
  6. async (...args) => {
  7. try {
  8. const [{
  9. // 请求的类型,查询参数,以及url
  10. request: { method, queryString, url },
  11. response: { bodySize, status },
  12. // 该方法可用于获取响应体
  13. getContent,
  14. }] = args;
  15. log(method, queryString, url);
  16. log(bodySize, status);
  17. // 将callback转为await promise
  18. // warn: content在getContent回调函数中,而不是getContent的返回值
  19. const content = await new Promise((res, rej) => getContent(res));
  20. log('response= '+content);
  21. // 调用background.js中的函数
  22. var bg = chrome.extension.getBackgroundPage();
  23. bg.sendRequest(url);
  24. } catch (err) {
  25. log(err.stack || err.toString());
  26. }
  27. });

background.js

  1. document.scripts[0].src="axios.min.js"
  2. function addScript(url){
  3. var script = document.createElement('script');
  4. script.setAttribute('type','text/javascript');
  5. script.setAttribute('src',url);
  6. document.getElementsByTagName('head')[0].appendChild(script);
  7. }
  8. addScript("scripts/axios.min.js")
  9. function sendRequest(args){
  10. console.log("bg sendRequest");
  11. this.axios({
  12. method: args.method,
  13. url: args.url,
  14. data: args.data,
  15. headers:args.headers
  16. }).then(resp => { //请求成功
  17. console.log("sendRequest:"+resp);
  18. }).catch(error => { //请求失败
  19. console.log(error);
  20. }).then(() => { //() => {} 相当于 function(){}
  21. console.log("不管怎么样都要执行"); //必须执行的代码,相当于finnally
  22. })
  23. }
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号