是否真的UIWebViewDelegate不监视使用XMLHttpRequest发出的请求?如果是这样,有没有办法监控这类请求?
例如,UIWebViewDelegate没有捕获到它-(BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSMutableURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://www.google.com", true);
xhr.onreadystatechange=function()
{
if (xhr.readyState==4)
{
alert(xhr.responseText);
}
}
xhr.send();
Run Code Online (Sandbox Code Playgroud) 有没有办法在使用通用JavaScript(而不是框架)的网页上检测全局AJAX调用(特别是响应)?
我已经在StackOverflow上查看了" JavaScript检测AJAX事件 " 的问题,并尝试将接受的答案代码修补到我的应用程序中,但它没有用.我之前从未对AJAX做过任何事情,我不知道修改它是否有效.
我不需要任何花哨的东西,我只需要检测所有(具体的,实际上,但我必须首先检测所有并从那里开始)AJAX响应并将它们修补到IF语句中以供使用.所以,最终,我想要像:
if (ajax.response == "certainResponseType"){
//Code
}
Run Code Online (Sandbox Code Playgroud)
, 例如.
更新: 似乎我应该澄清我不是在尝试发送请求 - 我正在开发一个内容脚本,我需要能够检测到网页的AJAX请求(不是我自己的),所以我可以执行一个检测到响应时起作用.
我有一个页面,我可以插入一些javascript/jquery来操作输出.我对页面标记等没有任何其他控制权.
我需要在页面上的每个元素之后通过jquery添加一个额外的元素.问题是元素是通过现有页面上的异步调用生成的,该调用发生在$(document).ready完成之后.
本质上,我需要一种方法在页面加载后调用我的jquery并完成后续的ajax调用.有没有办法检测页面上任何ajax调用的完成情况,然后调用我自己的自定义函数在新创建的s之后插入其他元素?
有没有办法ServiceWorker(或其他机制)检测何时下载资源?
例如,如果发生以下任何情况,我希望收到通知:
<img src> 下载background-image: url(...)下载中的资源@import并且正在获取资源<script src> 下载XMLHTTPRequest或fetch短的黑客开放的XMLHttpRequest.prototype方法,它的JavaScript提供了一种方法来听网络活动?
这与关于空闲网络活动的问题相反
如何修补猴子XMLHTTPRequest的onreadystatechange功能.我正在尝试添加一个函数,当从页面发出的每个ajax请求返回时,将调用该函数.
我知道这听起来像一个可怕的想法,但用例非常奇特.我想在控制台(jqconsole)中使用某个SDK,但在控制台内显示ajax调用的状态和结果,而不修改外部SDK.
我看过这篇文章有很多信息,但猴子修补回调似乎超出了我的JavaScript技能.
PS不能使用jQuery,因为它只支持从jQuery调用的jjj调用,而不是XMLHTTPRequests直接来自这里的情况.
我正试图检测我的UIWebView中何时完成任何ajax调用.我在这个答案中修改了代码:JavaScript尽我最大的能力检测AJAX事件.这是我的尝试:
var s_ajaxListener = new Object();
s_ajaxListener.tempOnReadyStateChange = XMLHttpRequest.prototype.onreadystatechange;
s_ajaxListener.callback = function () {
window.location='ajaxHandler://' + this.url;
};
XMLHttpRequest.prototype.onreadystatechange = function() {
alert("onreadystatechange called");
s_ajaxListener.tempOnReadyStateChange.apply(this, arguments);
if(s_ajaxListener.readyState == 4 && s_ajaxListener.status == 200) {
s_ajaxListener.callback();
}
}
Run Code Online (Sandbox Code Playgroud)
我正在将其注入webView,但警报从未触发.如果我在脚本的开头或结尾放置一个警报,它会触发,所以我很确定没有语法错误.
我不是一个JS人,所以我希望这是一个微不足道的问题.
我正在尝试在JavaScript中重载XMLHttpRequest.*方法,以便网页可以确定是否发生了Ajax请求而没有使用任何侵入式回调.现在,使用大多数JS框架时,这样的工作相对较好:
XMLHttpRequest.prototype.getResponseHeader = function() {
alert('O hai, looks like you made an AJAX request.');
}
Run Code Online (Sandbox Code Playgroud)
但是,有两个捕获:
xmlhttp.open("GET","simple.html",false);有没有什么方法JS可以镜像XMLHttpRequest.open()或任何方式,我可以链接到它.我已经尝试了一百万个范例(工厂,克隆,包装 - 最多导致无限递归),似乎没有任何工作.也许这是不可能的.有任何想法吗?
我试图在没有jQuery的情况下重现jQuery的函数ajaxComplete和ajaxStart,这样它们就可以在没有库依赖的任何环境中使用(这是一个特殊的用例).这些函数允许在任何ajax请求之前和之后调用事件侦听器.在我的示例中,我将它们称为preAjaxListener和postAjaxListener.
我试图挂接到XMLHttpRequest对象和覆盖/装潢完成它open和send.是的,我知道这很脏.
XMLHttpRequest.prototype.open = (function(orig){
return function(a,b,c){
this._HREF = b; // store target url
return orig.apply(this, arguments); // call original 'open' function
};
})(XMLHttpRequest.prototype.open);
XMLHttpRequest.prototype.send = (function(orig){
return function(){
var xhr = this;
_core._fireAjaxEvents('pre', xhr._HREF); // preAjaxListener fires
var rsc = xhr.onreadystatechange || function(){}; // store the original onreadystatechange if it exists
xhr.onreadystatechange = function(){ // overwrite with custom function
try {
if (xhr.readyState == 4){
_core._fireAjaxEvents('post', xhr._HREF); // postAjaxListneer should fire …Run Code Online (Sandbox Code Playgroud)