编程开发 --- 浏览器注入js
需求:
在不修改代码的情况下修改程序执行的功能,我们也称为hook技术。我想加一个获取输入框数值到达18位自动发送http请求到后端检索数据库。难点是CORS安全问题和iframe嵌套问题,这里是使用油猴脚本自带的发送功能规避cors问题。
解决办法:
油猴脚本注入js
具体步骤:
0.创建示例文本框
创建一个文件
3.html
<iframe name="tabContent_A0000001A02000791921D994FECB3C85E05310380C5D0AEA" src="2.html" style="width: 400px; height: 200px;"></iframe>
2.html
<!DOCTYPE html> <html> <head> <title>MyIframe</title> <style> body { font-family: Arial, sans-serif; } input[type="text"] { padding: 10px; font-size: 16px; } </style> </head> <body> <input type="text" id="dksbdForm_skfnsrsbh" placeholder="请输入文本"> <script> const myInput = document.getElementById('dksbdForm_skfnsrsbh'); myInput.addEventListener('input', function(event) { console.log('输入框值改变了'); console.log('当前值:', this.value); }); </script> </body> </html>
1.在浏览器安装油猴插件
2.导入脚本配置
// ==UserScript== // @name 输入框监测示例 // @namespace http://60.164.245.85:8888/ // @version 1.0 // @description 获取并打印输入框的值 // @match http://60.164.245.85:8888/* // @grant GM.xmlHttpRequest // ==/UserScript== (function() { 'use strict'; // 获取 iframe 的引用 const iframeElement = document.querySelector('iframe[name="tabContent_A0000001A02000791921D994FECB3C85E05310380C5D0AEA"]'); // 确保 iframe 以及 iframe 的 contentWindow 和 contentDocument 加载完成 iframeElement.onload = function() { const iframeDocument = iframeElement.contentDocument; const inputElement = iframeDocument.getElementById('dksbdForm_skfnsrsbh'); // 在父页面中监听 iframe 内的输入框事件 inputElement.addEventListener('input', function(event) { // console.log('输入框值改变了'); // console.log('当前值:', this.value); // 获取输入框的值 var inputValue = inputElement.value; // 移除输入值中的非数字字符 var numbers = inputValue.replace(/\D/g, ""); // 检查是否输入了18位数字 if (numbers.length === 18) { // 打印输入框的值 let postData = 'data=' + encodeURIComponent(numbers); console.log("输入框的值为:" + numbers); // 发送请求到后台 // 发送POST请求 GM.xmlHttpRequest({ method: 'POST', url: 'http://127.0.0.1:8080/api/data', data: postData, headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, onload: function(response) { // 请求成功后的处理逻辑 console.log('提交成功'); alert(response.responseText); }, onerror: function(response) { // 请求失败后的处理逻辑 console.log('提交失败'); console.log(response.responseText); } }); } }); }; })();
3.编写后台示例
这是编写一个springboot的demo
package com.ruoyi.system.controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api") public class ApiController { @PostMapping("/data") public String receiveData(@RequestBody String data) { // 处理油猴脚本发送的数据 System.out.println("Received data from Greasemonkey script: " + data); // 可以在这里编写逻辑来处理接收到的数据,如保存到数据库,发送通知等 return "恭喜你查询成功,你的输入值是:"+data+",该人有不良记录"; } }
3.访问3.html,在输入框中输入数字触发http请求查看弹窗