【发布时间】:2015-06-01 08:22:08
【问题描述】:
我通过更改 XMLHttpRequest.prototype open 和 send 方法在我的站点中拦截 AJAX 请求。这种方法在我测试的所有浏览器中都没有任何问题。然而,对于 iOS 版 Chrome (iPhone),代码有一个最奇怪的错误:就像它不断触发我在原型中更改的代码(显然最终崩溃了)。
这是我正在做的一个超级最小的例子:
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
};
我已经组装了一个小 JSBin,您可以在 iOS 上使用 Chrome 访问:Demo
根据this 的答案,我正在使用的代码(基本上与该答案中将使用的一个 OP 相同)是安全的,没有理由担心。而且,事实上,iOS 版 Chrome 是唯一表现异常的浏览器。
这两天让我发疯了,感谢任何建议或解决方法。
【问题讨论】:
-
XMLHttpRequest.prototype.open = function() { alert("moo"); open.apply(this, arguments); }会发生什么?call不将操作上下文作为第一个参数,而是将其视为第一个函数参数。但是,appy确实如此。 -
据我所知
calldoes take the operation context as the first argument,唯一的区别在于其余的论点。但是,无论如何,我尝试使用apply对其进行编辑,但我得到了同样的错误。平心而论,我试图完全删除该行,但我仍然遇到同样的问题:似乎编辑XMLHttpRequests的prototype可以做到这一点。 -
好点。其他 IOS 浏览器能用吗?因为 IOS 上的所有浏览器本质上都是同一个渲染引擎之上的“可用性接口”。还有,是不是特定版本的IOS?
-
是的,我尝试了其他 iOS 浏览器,例如 Mercury 和 Opera Mini。我听说 iOS 版 Chrome 的怪癖远远超出了您对 WebView 的期望。我的 iOS 版本是 8.2,但我已经尝试在 iOS 7 上使用朋友的 iPhone。 Chrome 版本最新于:41.0.2272.58。
标签: javascript ios ajax chrome-ios