在 iOS 版 Chrome 上拦截 AJAX 请求?

2024-02-13

我通过更改来拦截我网站中的 AJAX 请求XMLHttpRequest.prototype open and send方法。这种方法在我测试的所有浏览器中都没有任何问题。然而,当涉及 iOS (iPhone) 版 Chrome 时,代码有一个最奇怪的错误:就像它不断地触发我在原型中更改的代码(显然最终崩溃了)。

这是我正在做的一个超级简单的例子:

var open = XMLHttpRequest.prototype.open; // Caching the original
XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {
    alert('open'); // Here is my code
    open.call(this, method, url, async, user, pass); // Calling the original
 };

I've assembled a little JSBin doing just that you can visit with your Chrome on iOS: Demo http://jsbin.com/zohula/2

根据this https://stackoverflow.com/a/25335826/313115答案,我正在使用的代码(基本上与该答案中将使用的一个OP相同)是安全的,没有理由担心。事实上,iOS 版 Chrome 是唯一一个行为异常的浏览器。

这两天让我抓狂,任何建议或解决方法都很感激。


如何在 iOS 版 Chrome 上拦截 AJAX 请求

这是适用于大多数浏览器的 XMLHttpRequest 拦截代码:

(function(open) {
  XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {
    // Intercept the open request here
    alert("Intercepted: " + url);
    open.apply(this, arguments);
  };
})(XMLHttpRequest.prototype.open);

xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET","http://google.com",true);
xmlhttp.send();

iOS 版 Chrome 存在问题。下面对此进行了提出和研究。我将对“重复”进行解释open()调用”错误、演示和解决方法。

  • 修改 XMLHttpRequest 的原型使其在 iOS 版 Chrome 中持续触发 http://code.google.com/p/chromium/issues/detail?id=471591

  • 开发新的 Relic 浏览器时我们发现的疯狂事情 http://blog.newrelic.com/2014/04/11/crazy-things-found-developing-new-relic-browser/

  • iOS 上的 Chrome 可能会吃掉你的全局变量! http://jamesallardice.com/chrome-on-ios-might-eat-your-global-variable/

从最后一个参考:

页面加载时,Chrome 向服务发出两个异步请求 它大概是在本地运行的。从 URL 的声音来看,它是 请求时,这些服务用于确保页面的安全 您正在访问。

这是 Chrome 尝试访问的一个此类本地 URL 的屏幕截图(Demo http://jsbin.com/rekozo/1/):

Chrome 通话XMLHttpRequest.open()定期自行。这些对拦截代码的重复调用并不是由拦截代码本身引起的;它们是由不相关且重复的来自 Chrome 浏览器的调用。我已经识别出两个这样的 URL。可能还有其他人。

  • /chromeforiossecurity/b86 ... 98d/
  • https://localhost:0/chromecheckurl https://localhost:0/chromecheckurl

根据我的研究,这种解决方法使得 XMLHttpRequest 代码被拦截work在 iOS 版 Chrome 上。看到这个JSBin http://jsbin.com/rekozo/1/测试演示。它将展示刚刚how这些重复的电话也会发生。本质上,拦截代码应该忽略 Chrome 使用的 URL。

(function(open) {
  XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {
    var d1 = document.getElementById('urls');

    // Avoid intercepting Chrome on iOS local security check urls
    if(url.indexOf("/chromecheckurl") < 0 && url.indexOf("/chrome") !== 0) {
        // These are what we want to intercept
        d1.insertAdjacentHTML('beforeend', '<b>'+url+'</b><br/>');
    } else {
        // These are the internal Chrome requests - we can ignore them
        d1.insertAdjacentHTML('beforeend', '<i>'+url+'</i><br/>');
    }

    open.apply(this, arguments);
  };
})(XMLHttpRequest.prototype.open);


xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET","http://google.com",true);
xmlhttp.send();

这是我对这个“重复”的解释的最好尝试open()iOS 版 Chrome 上的“调用”错误以及解决方法。

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

在 iOS 版 Chrome 上拦截 AJAX 请求? 的相关文章

  • jquery ajax调用一个接一个循环而不停止页面渲染

    我有一个超过 100 行的表 每行包含 pdf 文件及其说明以及最后一列状态 状态显示 pdf 文件是否可读 一旦表格加载到浏览器中 我就会从表格的每一行获取每个文件名 并使用 ajax 调用对其进行处理 如果文件可读 我将该行的状态字段更
  • Typescript:如何在自定义过滤器中使用角度 $filter

    如何在自定义过滤器中使用 Angular filter 如何注入 filter依赖 module Filters export class CustomFilter public static Factory return function
  • 无法验证包:721772200.itmsp

    我写这篇文章是因为我有一个严重的问题 我在cartoonsmart 网站上购买了Commander Cool 游戏 然而 一个严重的问题发生了 iTune Connect 验证无法接受该申请 我尝试从两个不同的开发者帐户发布它 但错误仍然发
  • 在 JavaScript 中定位提示弹出窗口

    我有一个如下所示的 JavaScript 提示 我想将提示放在屏幕中心 如何使用 javascript 做到这一点 function showUpdate var x var name prompt Please enter your na
  • 使用 AJAX 或多线程加速页面加载

    我的页面有 5 个部分 每个部分大约需要 1 秒来渲染 Page Load RenderSection1 1 sec RenderSection2 1 sec RenderSection3 1 sec RenderSection4 1 se
  • 将 Google 电子表格解析为 Javascript 数组

    我有一个 Google 电子表格 https docs google com spreadsheets d e 2PACX 1vRc8Lx0N wf3f1xAAXkNFUqQjaWPFcde3YjK02gCBqGpUrULwHC6NC0sn
  • 使用远程图像创建 MSSticker

    我正在尝试找出使用网络上托管的图像创建 MSStickers 的方法 我可以使用本地图像创建 MSStickers 例如 NSString imagePath NSBundle mainBundle pathForResource imag
  • JavaScript:预期的赋值或函数调用,却看到了一个表达式

    我正在使用 JSHint 来确保我的 JavaScript 是 严格的 但我收到以下错误 预期是赋值或函数调用 但看到的是表达式 关于以下代码 var str A B C D var data var strArr str split fo
  • 在 jQuery AJAX 成功中从 MySql 获取特定响应

    好吧 我有这个 ajax 代码 它将在 Success 块中返回 MySql 的结果 ajax type POST url index php success function data alert data My Query sql SE
  • mgwt - 以编程方式改变方向

    是否可以在 gwt mgwt 应用程序中更改强制执行特定的屏幕方向 可以说我希望用户始终以横向模式使用应用程序 这取决于 是作为phonegap应用程序 而不是在浏览器内部 如果您作为 Web 应用程序运行 则不需要t get any co
  • (0, eval) () 的作用是什么? [复制]

    这个问题在这里已经有答案了 以下内容来自这个问题 https stackoverflow com questions 14119988 return this 0 evalthis 14120023 14120023 function q
  • 如何在 iOS 中通过 Twitter API 获取用户电子邮件地址?

    我尝试了多个 SDK 但无法从任何资源获取电子邮件 ID 我努力了FHSTwitterEngine为此目的 但我没有得到解决方案 FHSTwitterEngine twitterEngine FHSTwitterEngine sharedE
  • UIStackView分布均匀填充

    所以 我有一个UIStackView其中包含四 4 UIViews 如果我删除其中一 1 个UIViews 其他三 3 个将填满UIStackView 我的问题 如何添加最大高度UIView这样它就不会填满整个空间UIStackView即使
  • toLocaleDateString() 在 Chrome 中如何工作?

    我理解了javascript方法toLocaleDateString 使用的计算机设置 让我们来W3Schools 示例 http www w3schools com jsref tryit asp filename tryjsref to
  • 如何生成 JavaScript 堆栈跟踪? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 关于如何以跨浏览器的方式在 javascript 中生成堆栈跟踪有什么建议吗 较新的浏览器 Chrome 和 Firefox 公开了一个允
  • 显示班级图片 10 秒

    我有下面给出的代码显示9 boxes 其值如下digital time 还有一个班级box002显示digits相当于随机选择的九个盒子的值 box002 can be dragged to digital time starting wi
  • iOS Safari Mobile 禁用上一个和下一个选择输入

    上周五我发现了关于此问题的类似问题 但似乎无法再次找到它 如果有人能指出我正确的方向 那就太好了 本质上我在一个页面上有多个选择菜单 第一个在加载时填充 第二个在第一个选择时填充 够简单的 但是 在 iOS 设备中 当您点击选择元素时 它会
  • Angular 2访问组件内的ng-内容

    我怎样才能访问 content 来自组件类本身的组件 我想做这样的事情
  • 跨浏览器:禁用输入字段的不同行为(文本可以/不能复制)

    我有一个被禁用的输入 html 字段 在某些浏览器 Chrome Edge Internet Explorer 和 Opera 中可以选择并复制文本 但至少在 Firefox 中这是不可能的 您可以通过在不同浏览器中执行以下代码来测试
  • 如何设置 Firebase 用户的显示名称?

    根据Firebase网站上的JS Auth文档 它只展示了如何获取 displayName 以及如何更新 displayName 所以我尝试更新它 但这有点不合逻辑 因为你怎么能在不创建某些东西的情况下更新它呢 所以我的问题是 如何设置注册

随机推荐

  • 什么是焊接,JSR-299?

    我发现了很多显示 Weld 代码示例的教程 但没有介绍性概述 您能否推荐一篇介绍性文章 或回答以下问题 Weld 能做什么 给你带来什么 它与 Java EE 6 有什么关系 如何在 Java EE 6 项目中使用它 如果在 Java EE
  • 使用c++ opengl的贝塞尔曲线

    我使用此代码通过单击一个点来绘制贝塞尔曲线 如果我使用编写的静态公式 它会起作用drawBezier函数 它会形成正确的曲线 但是如果我使用写成的广义公式drawBezierGeneralized 最后一点有问题 我究竟做错了什么 incl
  • 将 Hadoop 中的文件获取到 Web 应用程序中

    我是 Hadoop 新手 现在我正在尝试在 eclipse 中做一个应用程序 我想在其中使用 HDFS 中存在的数据 如果我们想用Java连接数据库 我们有JDBC连接 那么 我需要做什么才能直接连接HDFS呢 在 Hadoop 中 首先
  • SQL Server 2016_无法启动镜像

    将SQL Server 2014升级到SQL Server 2016 都是企业版 后 我无法启动镜像 这在 SQL Server 2014 上正常工作 我恢复后 WITH NORECOVERY 镜像数据库 包含我通常运行的主数据库的完整备份
  • 如何强制 Iframe 在标准父框架下运行怪异

    我们有一个父页面必须在 IE9 标准模式下运行 执行 HTML5 命令 下面我们有一个必须在兼容模式 IE7 8 下运行的 iframe 据我了解 在 IE9 中 iframe 继承了父级的文档类型 那是对的吗 这个问题有什么解决办法吗 不
  • 将附加参数传递给 python 回调对象 (win32com.client.dispatchWithEvents)

    我正在使用 win32com 包与 Windows 应用程序交互 应用程序并不重要 简而言之 我想要实现的是订阅更新的表 我已经成功实现了一个回调 该回调接收表更新时返回的数据 但我现在需要的是对收到的数据采取行动 如果我可以使用附加参数实
  • VHDL - iSIM 输出未初始化,不改变状态

    您好 我是一位 Xilinx 新用户 在如何在测试台中编写激励 模拟方面遇到了麻烦 我的输出 Kd 没有给我任何合理的值 并在移动并始终保持在 1 之前的前几个时钟周期给出 u 不确定我是否写了正确的刺激 但希望有人能帮助我 我的VHDL代
  • 空字符串对于 React Link 来说是有效值吗?

    我正在写一个React js http React 20 E2 80 93 20A 20JavaScript 20library 20for 20building 20user 20interfaces 20 20https reactjs
  • 如何在Python中使用将双反斜杠替换为单反斜杠来替换字节字符串

    我想将 Python 中字节字符串的双反斜杠替换为单反斜杠 例如 有一个字节字符串 word b Z xa6 x97 x86j2 x08q r xca xe6m 我需要这个字节字符串 word b Z xa6 x97 x86j2 x08q
  • WPF 类和相应的视觉样式继承

    我已经看过 但显然在与类和样式相关时无法获得正确的语法 我有具有特定行为的控件 我派生出一些来添加额外的行为 现在 我想要一个与每个版本相对应的样式 在最简单的示例中 我将忽略这些类 因为我知道样式与视觉影响具体相关 而不是与功能影响相关
  • 添加 nuget 包源的脚本方式

    我们想要启动一个公司 nuget 包存储库 有没有办法通过命令行添加包源 以便我们可以通过设置或其他方式配置新的包源 我们基本上不想去 工具 选项 包管理器 包源 加号按钮 添加名称和来源 在公司的每台开发人员机器上 包源存储在用户配置文件
  • 如何获取 boto3 集合的大小?

    我一直使用的方法是将Collection转换为List并查询长度 s3 boto3 resource s3 bucket s3 Bucket my bucket size len list bucket objects all 然而 这会强
  • 用颜色条调整子图

    I have made the following visualization I am at loss to figure out how to adjust the size of the third subplot according
  • 防止 $anchorScroll 修改 url

    我在用 anchorScroll https docs angularjs org api ng service 24anchorScroll滚动到 html 元素具有 ID 的页面顶部 brand
  • Spring MVC @RequestMapping 继承

    来自 Struts2 我习惯于声明 Namespace超类上的注释 或package info java 并且继承类随后将获取中的值 Namespace其祖先的注释并将其添加到操作的请求路径之前 我现在正在尝试使用 Spring MVC 做
  • 两个几乎相同的批处理脚本之一中存在语法错误:“)”无法在此处进行语法处理

    我正在尝试设置 Jenkins 服务器来自动构建 Unity 因此 我编写了两个 在我看来 基本相同的批处理脚本 这两个脚本均由 Jenkins 通过Execute Windows batch command步骤使用 Command E u
  • chrome.identity.getProfileUserInfo() 返回空 ID [重复]

    这个问题在这里已经有答案了 我不知道这是否只是开发问题 因为我还没有发布我的扩展 getProfileUserInfo 返回 email id 我是否登录 chrome 并不重要 这是我的清单中的权限 permissions activeT
  • 如何在 MVC 中获取站点的基本 url [重复]

    这个问题在这里已经有答案了 我想向用户发送一封电子邮件 他可以在其中单击链接以转移到我的网站 我不想在我的电子邮件模板中对 URL 进行硬编码 我想要这种动态 无论环境如何 它都会发送相关的 url 就像如果我在开发环境中它会发送类似的内容
  • 在 python 中创建漂亮的列输出

    我正在尝试在 python 中创建一个漂亮的列列表 以便与我创建的命令行管理工具一起使用 基本上 我想要一个类似的列表 a b c aaaaaaaaaa b c a bbbbbbbbbb c 变成 a b c aaaaaaaaaa b c
  • 在 iOS 版 Chrome 上拦截 AJAX 请求?

    我通过更改来拦截我网站中的 AJAX 请求XMLHttpRequest prototype open and send方法 这种方法在我测试的所有浏览器中都没有任何问题 然而 当涉及 iOS iPhone 版 Chrome 时 代码有一个最