检索和修改 XMLHttpRequest 的内容

2023-11-24

我正在为 Firefox、Safari、Chrome 开发一个浏览器插件,它将拦截页面上的数据,针对正则表达式运行它,然后如果匹配,则重新格式化它。我使用以下方法在页面加载上进行此操作:

var meth = {
  replaceInElement : function(element, find, replace) {
        // iterate over child nodes and replace
  },
  run : function(evt){
    // doc is the document that triggered "run" event
    if (!(evt.target.nodeName === "#document")) { return; }
    var doc = evt.target; // document that triggered "onload" event
    if (!(doc instanceof HTMLDocument)) { return; }
    if (!doc.location) { return; }

    // perform substitutions on the loaded document
    var find = /regex/gi

    meth.replaceInElement(doc.body, find, function(match) {
        var new_content;
        //do stuff
        return new_content;
    });

    //content.document.addEventListener('DOMNodeInserted', ezcall.node_inserted, false);
  }
}

window.addEventListener("load", meth.run, false);

这适用于静态页面,但对于使用 ajax 调用的任何内容,它都会失败。我找不到正确的侦听器或弄清楚如何拦截 XMLHttpRequest。

我尝试过类似的 XMLHttpRequest 事件侦听器,但没有成功。

XMLHttpRequest.addEventListener('load', meth.run, false);

我想拦截请求并修改内容。或者找到更新的目标并在ajax调用完成后扫描它。

UPDATE:

我会接受一个说它无法完成的答案,但我需要一些支持数据来解释为什么它无法完成。


相当脏,但你可以覆盖XMLHttpRequest.prototype.open。这里有一个Demo页。由于您正在编写扩展,因此您必须将此代码放入页面上下文中:

(function() {
    // save reference to the native method
    var oldOpen = XMLHttpRequest.prototype.open;
    // overwrite open with our own function
    XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {
        // intercept readyState changes
        this.addEventListener("readystatechange", function() {
            // your code goes here...
            console.log("Interception :) " + this.readyState);
        }, false);
        // finally call the original open method
        oldOpen.call(this, method, url, async, user, pass);
    };
})();

之后你可以做任何我想的事情。代替instance.readystatechange, 代替instance.addEventListener,或者监听突变事件(尽管它们是已弃用).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检索和修改 XMLHttpRequest 的内容 的相关文章

  • 如果单元格以文本字符串开头...公式

    我有一个公式 用于检查单元格是否以文本 A 开头返回 拾取 B 代表收集 和 C 代表预付 但它似乎不能正常工作 A 和 C 均返回预付费 LOOKUP LEFT A1 A B C Pick Up Collect Prepaid 我不知道l
  • 为什么使用SignTool进行代码签名时需要指定时间戳服务器?

    时间戳是可选参数 所以有人可以解释带时间戳的exe文件和不带时间戳的exe文件之间的区别吗 如果我跳过此选项会发生什么 如果您跳过时间戳选项 那么当您的证书过期时 exe 将不再具有有效的证书 如果您使用时间戳服务器 那么 exe 将始终具
  • PSQLException:错误:关系“TABLE_NAME”不存在

    我正在尝试在 PostgreSQL 8 4 2 DB 上运行休眠 每当我尝试运行简单的java代码时 例如 List
  • Angular2 http.post 被执行两次

    我遇到一个奇怪的问题 Angular2 的 RC1 Http 服务执行 http post 调用两次 我已经调试了我的应用程序 并且我知道这不是点击事件问题 导致核心服务调用的所有调用 public create json Object p
  • RIMM 流文件格式中各个帧的格式是什么

    我正在尝试从黑莓设备捕获一些视频帧并将其作为图像进行操作 特别是进行条形码解码 我找到了一些示例代码和规范文档 其中演示了如何使用 J2ME MMAPI 类将视频从设备的摄像头流式传输到文件和输出流 流媒体文件采用 RIM 专有的 RIMM
  • 跳过一行GridBagLayout

    我在 JFrame 上使用 GridBagLayout 我希望能够跳过一两行 但将这些行显示为空白 然后在这些行后面有一个按钮 我在文档中找不到任何方法来执行我所描述的操作 有谁知道我可以执行此操作的任何方法吗 发现它比添加空组件干净得多
  • PostgreSQL 使用 JPA 和 Hibernate 抛出“列的类型为 jsonb,但表达式的类型为 bytea”

    这是我的实体类 映射到表中postgres 9 4 我正在尝试将元数据存储为jsonb在数据库中输入 Entity Table name room categories TypeDef name jsonb typeClass JsonBi
  • 如何在 SpringDoc OpenAPI 3 中引用文件?

    我有 Spring Boot 项目 我想在其中记录我的 API 这里是正在处理的 Web 服务的示例 ApiResponses value ApiResponse responseCode 200 content Content media
  • 获取不正确的日期,将时间戳转换为新日期

    我正在尝试将时间戳转换为日期 但得到的日期不正确 我正在开发一个使用 Angular 和 Typescript 的项目 我有这样的时间戳 1451642400 2016年1月1日 和1454320800 2016年2月1日 如果我编码 da
  • 如何通过 jQuery onblur 提交表单

    所以我尝试通过 jQuery onblur 提交表单 即一旦焦点离开密码字段 表单就会通过 jQuery 提交 有类似的问题 但这不是我要找的 我尝试使用 document getElementById 但它不起作用 任何帮助表示赞赏 提前
  • 如何从停止的地方开始播放视频

    我正在使用 VideoView 来播放视频 如果我退出应用程序 在返回应用程序 即在 onResume 中 时 它应该从停止的位置播放视频 要获取当前进度 在 onPause 中检查 long progress mVideoView get
  • Laravel Echo 不监听推送事件

    尝试使用 laravel 和 vuejs 创建一种聊天应用程序 发送消息后 我会从 laravel 触发事件 该事件会使用正确的事件类反映在推送器调试控制台上 但根本不会调用来自 vuejs 的监听回调 created window Ech
  • 尝试访问从资产复制到数据\数据\的数据库中的DatabaseHelper时出现空指针异常

    我有一个数据库助手类 代码如下 这个助手的类任务是将数据库从应用程序附带的资产文件夹复制到我的应用程序的 data data 中 以便我可以使用它 一旦我将数据库放入 data data 我能够 我想添加它并执行 CRUD 操作 并且该数据
  • 如何将 Ant 路径转换为文件集?

    我正在编写一个 Ant 脚本来将项目打包到 WAR 文件中 该软件由多个项目组成 它们有自己的源目录 库等 WAR 任务有一个嵌套元素lib我目前正在研究这个问题 我目前有所需库的参考作为Path 包含几个FileSets 我在类路径引用中
  • SQL 中 NOT 和 != 运算符有什么区别?

    有什么区别NOT and SQL 中的运算符 我无法理解其中的区别 我猜他们是一样的 NOT negates以下条件 因此它可以与各种运算符一起使用 is the 非标准替代品 https stackoverflow com a 10650
  • 常用姓名别名/昵称数据库

    我参与了一个 SQL NET 项目 该项目将搜索名称列表 我正在寻找一种方法来返回类似名字的人的一些结果 如果搜索 Tom 结果将包括 Thom Thomas 等 这是文件还是 Web 服务并不重要 设计示例 Table Names has
  • KeyboardAvoidingView“行为”中的高度与位置与填充

    KeyboardAvoidingView 中有一个 行为 属性 例如 import KeyboardAvoidingView from react native
  • 在 Android 上使用 pocketsphinx 未检测到关键字

    谁能解释一下如何使用 pocketsphinx 将语音转换为文本 我试试这个 import com example speechtutor SpeechRecognizerRecorder import com example speech
  • 关闭 IPython Notebook 中的自动保存

    我正在寻找一种方法来关闭 iPython 笔记本中的自动保存 我已经通过 Google Stack Overflow 搜索看到了有关如何打开自动保存的参考资料 但我想要相反的内容 关闭自动保存 如果这是可以永久设置的东西而不是在每个笔记本的
  • “保留供任何使用”是什么意思?

    注意 这是一个c questions tagged c问题 虽然我补充说c questions tagged c 2b 2b如果某些 C 专家可以提供 C 使用与 C 不同的措辞的基本原理或历史原因 在 C 标准库规范中 我们有这个规范文本

随机推荐

  • 如何使用 appsync 从 DynamoDB 返回 JSON 对象?

    如何从 DynamoDB 获取 JSON 对象响应 我将数据作为 JSON 格式的对象数组存储在数据库中 我有下一个映射模板请求 version 2017 02 28 operation PutItem key userId S conte
  • 创建给定年份中所有日期的向量

    是否有一个简单的 R 习惯用法来获取给定年份中所有日期的序列 除了闰年之外 我可以执行以下操作 dtt lt as Date paste as character year 1 1 sep seq 0 364 显然 我可以添加一行来过滤掉
  • 从 perl 脚本调用 bash 脚本

    我正在尝试 perl 脚本中的代码 需要在 bash 中调用另一个文件 不确定 哪个是最好的方法 我可以直接使用 system 调用它吗 请指导 向我展示示例方法 从我到目前为止所尝试过的 usr bin perl system bash
  • 将所有 POST 数据存储在 SESSION 中

    我有更多来自 POST 的值 超过 20 个 如下所示 name POST name username POST username city POST city mobile POST mobile address POST address
  • 如何检查网页是否存在。 jQuery 和/或 PHP

    我希望能够验证表单以检查网站 网页是否存在 如果它返回 404 错误 那么绝对不应该验证 如果有重定向 我愿意接受建议 有时重定向会转到错误页面或主页 有时会转到您正在寻找的页面 所以我不知道 也许对于重定向 可能会有一个特殊通知 向用户建
  • 圆形/矩形碰撞响应

    所以我不久前建了一点突破克隆 我想稍微升级一下 主要是为了碰撞 当我第一次做到这一点时 我有一个基本的 碰撞 在我的球和砖块之间进行检测 实际上将球视为另一个矩形 但这造成了边缘碰撞的问题 所以我想我会改变它 问题是 我找到了问题的一些答案
  • 检查表是否继承自 PostgreSQL 中的其他表

    在 PostgreSQL 中这些表 CREATE TABLE cities name text population float altitude int in feet CREATE TABLE cities capitals state
  • 在 Angular 的 ng-switch 中使用 html 模板

    我正在制作一个随着用户点击而移动的 交互式菜单 我想知道是否有办法在 ng switch 中包含 html 模板 由于每个 开关 中的所有逻辑都不同 这将导致巨大的 html 文件 div class content div h1 1 h1
  • numpy around/rint 与 astype(int) 相比慢

    所以如果我有类似的东西x np random rand 60000 400 200 iPython 的 timeit says x astype int 需要 0 14 毫秒 np rint x and np around x 需要1 01
  • 如何验证日期?

    我正在尝试测试以确保日期有效 因为如果有人输入2 30 2011那么应该是错误的 我怎样才能对任何日期执行此操作 验证日期字符串的一种简单方法是转换为日期对象并进行测试 例如 Expect input as d m y function i
  • 为什么mysql max_allowed_pa​​cket自动重置为1m

    I set SET GLOBAL max allowed packet 16777216 并且 mysqld max allowed packet 16M 我通过下面的命令检查了 max allowed pa cket SHOW VARIA
  • 持久保存到 Azure 表存储时使用 POCO

    我计划在我的 ASP NET 5 MVC 6 应用程序中使用 Azure 表存储 并添加了WindowsAzure StorageNuGet 包 但当我注意到我所有的 entnty 模型都需要继承时 我真的很失望Microsoft Wind
  • Laravel Dusk - 类配置不存在

    最近将 5 3 项目升级到 5 4 一切看起来都不错 今天我开始实现 Dusk 但是在运行示例测试时遇到了问题 footy finance 5 4 php artisan dusk PHPUnit 6 0 0 by Sebastian Be
  • ggplot2 版本 0.9.3.1 不会加载到 R 3.0.2 中

    我不小心删除了旧版本的ggplot2 所以我下载了新版本 当我使用时 library ggplot2 我收到以下错误 Error in loadNamespace i c lib loc libPaths versionCheck vI i
  • 减少 Java 8 中的一元运算符列表

    在 Java 8 中减少 UnaryOperators 列表直到它们代表一个我可以调用 apply 的 UnaryOperator 的首选方法是什么 例如我有以下内容 interface MyFilter extends UnaryOper
  • 文件扩展名 .DB - 它到底是什么类型的数据库?

    我有一个带有 DB 文件扩展名的数据库文件 我一直在谷歌上搜索 它看起来像 SQLite 我尝试使用 SQLite 和 SQLite3 驱动程序连接到它 但收到错误 文件已加密或不是数据库 所以我不知道文件是否已加密或者它不是 SQLite
  • CSS:两个 50% 流体列不考虑最小宽度

    我正在尝试使用this用两个 50 列宽代替的布局 但似乎当右列达到其 最小宽度 时 它会进入左列下方 有没有办法使用 垫片 技术来设置包装器的最小宽度 以便两列都停止调整大小 因此 消除了右列发现自己位于左列下方的问题 我的页面如下 di
  • 如何在 Perl 中设置文件读取缓冲区大小以针对大文件进行优化?

    我知道 Java 和 Perl 在读取文件时都非常努力地寻找一种适合所有默认缓冲区大小的方法 但我发现它们的选择越来越过时 并且在更改默认选择时遇到问题珀尔 以 Perl 为例 我相信它使用8K默认情况下的缓冲区 类似于Java的选择 我无
  • printf() 的执行和分段错误

    include
  • 检索和修改 XMLHttpRequest 的内容

    我正在为 Firefox Safari Chrome 开发一个浏览器插件 它将拦截页面上的数据 针对正则表达式运行它 然后如果匹配 则重新格式化它 我使用以下方法在页面加载上进行此操作 var meth replaceInElement f