相关疑难解决方法(0)

如何拦截不同JS库所做的所有AJAX请求

我建立与不同的JS库的web应用程序(AngularJS,的OpenLayers,...),并需要一种方法来拦截所有AJAX响应,以便能够在情况下登录的用户会话超时(响应回来与401 Unauthorized地位),重定向他到登录页面.

我知道AngularJS提供interceptors管理此类方案,但无法找到实现此类注入OpenLayers请求的方法.所以我选择了一种香草JS方法.

在这里,我发现了这段代码......

(function(open) {

    XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {

        this.addEventListener("readystatechange", function() {
            console.log(this.readyState); // this one I changed
        }, false);

        open.call(this, method, url, async, user, pass);
    };

})(XMLHttpRequest.prototype.open);
Run Code Online (Sandbox Code Playgroud)

...我改编并看起来像预期的那样(仅在最后一个Google Chrome上测试过).

当它修改XMLHTTPRequest的原型时,我想知道这可能导致多么危险,或者它是否会产生严重的性能问题.顺便说一句,有没有有效的替代方案?

更新:如何在发送请求之前拦截请求

上一个技巧可行.但是如果在同一个场景中你想在发送请求之前注入一些标题呢?请执行下列操作:

(function(send) {

    XMLHttpRequest.prototype.send = function(data) {

        // in this case I'm injecting an access token (eg. accessToken) in the request headers before it gets sent
        if(accessToken) this.setRequestHeader('x-access-token', accessToken);

        send.call(this, data);
    };

})(XMLHttpRequest.prototype.send);
Run Code Online (Sandbox Code Playgroud)

javascript ajax interceptor

106
推荐指数
1
解决办法
5万
查看次数

使用userscript捕获页面xmlhttp请求

我有一个用户脚本(用于chrome和FF),它为页面添加了重要功能,但最近因为开发人员向页面添加了一些AJAX而被破坏.我想修改脚本来监听页面xmlhttp请求,这样我就可以根据responseText页面接收的JSON格式动态更新我添加的内容.

搜索已经发现了许多应该工作的功能,并且在控制台中运行时可以正常工作.但是,它们不会从用户脚本的上下文中执行任何操作.

(function(open) {

    XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {

        this.addEventListener("readystatechange", function() {
            console.log(this.readyState);
        }, false);

        open.call(this, method, url, async, user, pass);
    };

})(XMLHttpRequest.prototype.open);
Run Code Online (Sandbox Code Playgroud)

来自:如何从Greasemonkey脚本拦截XMLHttpRequests?

这工作完全在控制台中,我可以改变this.readyState,以this.responseText和它的伟大工程(尽管在剧本我需要它来打开JSON数据转换成一个对象,然后让我userscript内操纵它.不只是写到控制台) .但是,如果我将其粘贴到用户脚本中没有任何反应.页面上的xmlhttp请求似乎没有被usercript中的事件处理程序检测到.

执行请求的页面使用jquery $ .get()函数,如果它可能与它有任何关系.虽然我不这么认为.

我无法想象没有办法,似乎在AJAX页面上运行的任何用户脚本都需要这种能力.

ajax xmlhttprequest userscripts

7
推荐指数
1
解决办法
4718
查看次数

Greasemonkey 和 http-on-modify-request

我正在研究编写一些篡改 HTTP POST 请求和响应的 JavaScript 代码。由于我想要编写的代码主要是概念验证,因此我认为 Firefox 扩展太多了(而且我宁愿不处理所有包装和 over SSL 限制)。当时我想知道是否可以将其编写为 Greasemonkey 脚本。因此我的问题是这样的:

您可以在 Greasemonkey 下使用 Mozilla 的事件观察器(http-on-modify-request 等)吗?

请记住,我 10 分钟前就了解了 JavaScript 是什么,但我在该领域没有任何经验。然而,我相信这在我的能力范围内,只要进行一点研究和顽固,我就可以实现它。尽管我担心尝试以不可能的方式完成某些事情。

谢谢!

乔治。

javascript greasemonkey xpcom httprequest

5
推荐指数
1
解决办法
2220
查看次数

从网站获取请求并检索响应?

我正在尝试监控一个网站(www.bidcactus.com)。在网站上,我打开 Firebug,转到网络选项卡,然后单击 XHR 选项卡。

我想获取请求的响应并将其保存到 mySql 数据库(我的计算机上运行着本地数据库(XAMPP)。

有人告诉我主要使用 jQuery 或 JavaScript 来做各种事情,但我也没有经验,所以我想知道是否有人可以帮助我。

有人向我建议了这个链接 Using Greasemonkey and jQuery to截取来自页面的JSON/AJAX数据,并处理它

它也使用 Greasemonkey,我对此也不太了解......

预先感谢您的任何帮助

示例/更多细节:
在监视发送的请求时(通过 firebug)我看到下面

http://www.bidcactus.com/CactusWeb/ItemUpdates?rnd=1310684278585
The response of this link is the following:
{"s":"uk5c","a":[{"w":"MATADORA","t":944,"p":5,"a":413173,"x":10},   
{"w":"1000BidsAintEnough","t":6,"p":863,"a":413198,"x":0}, 
{"w":"YourBidzWillBeWastedHere","t":4725,"p":21,"a":413200,"x":8}, 
{"w":"iwillpay2much","t":344,"p":9,"a":413201,"x":9}, 
{"w":"apcyclops84","t":884,"p":3,"a":413213,"x":14}, 
{"w":"goin_postal","t":165,"p":5,"a":413215,"x":12}, 
{"w":"487951","t":825,"p":10,"a":413218,"x":6}, 
{"w":"mishmash","t":3225,"p":3,"a":413222,"x":7}, 
{"w":"CrazyKatLady2","t":6464,"p":1,"a":413224,"x":2}, 
{"w":"BOSS1","t":224,"p":102,"a":413230,"x":4}, 
{"w":"serbian48","t":62,"p":2,"a":413232,"x":11}, 
{"w":"Tuffenough","t":1785,"p":1,"a":413234,"x":1}, 
{"w":"apcyclops84","t":1970,"p":1,"a":413240,"x":13}, 
{"w":"Tuffenough","t":3524,"p":1,"a":413244,"x":5}, 
{"w":"Cdm17517","t":1424,"p":1,"a":413252,"x":3}],"tau":"0"}
Run Code Online (Sandbox Code Playgroud)

我了解这些信息的含义,并且我认为我可以自己对其进行格式化,但是该网站会随机创建新的请求。
示例http://www.bidcactus.com/CactusWeb/ItemUpdates?rnd=XXXXXXXXXXXX
,我不确定它是如何创建它们的。

因此,我需要获取所有项目更新请求的响应,并将信息发送到 mysql 数据库。

javascript jquery greasemonkey

5
推荐指数
1
解决办法
7994
查看次数