我正在写一个Chrome扩展。如果你制作jQuery。通过https服务的页面内的常规http页面的ajax请求,然后请求被Chrome阻止。我想知道我是否可以使用安全代理获取所请求的页面。
那么,有可能为一些jQuery使用通用代理服务器吗?ajax请求吗?如果有,怎么做?注意,不能更改浏览器的代理设置。
[一年过去了…]如果我正确理解你的问题,你想改变你的AJAX请求取决于你目前在的网页。jQuery提供了许多与AJAX相关的方法,这些方法可能会帮助您解决这个问题。
我的建议是使用jQuery.ajaxPrefilter
并调整您的查询以使用代理而不是原始主机。文档中的一个示例:
$.ajaxPrefilter(function( options ) {
if ( options.crossDomain ) {
options.url = "http://example.com/proxy/" + encodeURIComponent( options.url );
options.crossDomain = false;
}
});
为了增加一点趣味,您还可以使用任何全局AJAX事件处理程序来监视您的请求。例如,查看是否有任何请求失败:
$( document ).ajaxError(function() {
console.log("Somethin' went wrawng!");
});
是的。
我们在工作中所做的就是实现一个代理,它就是这样做的:
- 它接受来自同一来源的web服务调用,然后, 服务器端的
- ,将它们映射到另一个来源的web服务
- 将它们送到那里,
- 接收结果和
- 将它们传递回调用者。
这样,您既可以遵守相同的起源策略,又可以与其他起源一起工作。但是,您总是需要服务器端代理功能。
您将需要一个外部库来使用JQuery通过HTTP代理执行Ajax请求。开箱即用的JQuery没有这个功能。这样的一个例子是https://www.AjaxProxy.com,它可以与您的查询一起使用,如下所示:
ajaxProxy.proxy.url = "http://your proxy";
ajaxProxy.proxy.credentials.username = "proxy username";
ajaxProxy.proxy.credentials.password = "proxy password";
$.ajax({
type: "GET",
url: "https://ICANHAZIP.COM",
headers: ajaxProxy.proxyHeaders(),
dataType: "text"
}).done (function (data) {
console.log(data);
});