Chrome通过jQuery ajax调用跨域jsonp资源的问题

时间:2013-04-18 01:03:12

标签: google-chrome jquery cross-domain jsonp

解决了 - 这是Adblock Plus

我有一个跨域OAuth场景,我直接从JavaScript调用第三方api上的OAuth受保护的jsonp资源。

客户端依靠我的服务器(原始站点)为提供程序上的OAuth资源生成签名的请求URL。客户端直接获取这些OAuth资源,试图将我的服务器的OAuth代理职责限制为简单地生成签名的资源URL并让JS完成其余的工作。这是JS:

myNamespace = {
    callApi: function(signedRequest, callback) {
        $.ajax({
            url: signedRequest,
            dataType: "jsonp",
            type: "GET",
            crossDomain: true,
            jsonp: false,
            jsonpCallback: callback,
            cache: true,
            async: true
        });
    },
    usersCallback: function(jsonp) {
        alert(jsonp);
    },
    getOAuthResource: function(resource, callback) {
        $.ajax({
            url: "/GetSignedRequest?resource=" +  encodeURIComponent(resource + "&callback=" + callback),
            success: function (signedRequest) {
                myNamespace.callApi(signedRequest, callback);
            }
        });
    }
}

由于参数订单在签署请求时很重要,因此我手动包含回调,以使其获得订购&包含在服务器生成的签名请求中。

所以一个示例用法很简单,

myNamespace.getOAuthResource("/users?id=1", "myNamespace.usersCallback");

这适用于FireFox 20和IE 10 - 我收到警告消息&来自提供者的预期json。

Chrome 26拒绝对提供商执行跨域调用。在开发工具中,跨域资源的GET立即显示状态为“(失败)”,并且GET在控制台中显示为错误。

如果我随后要求Chrome在新窗口中打开这个假设的“失败”网址,它会直接在提供商处重新请求网址,并获得预期的jsonp响应:

myNamespace.usersCallback({...})

为什么Chrome不会执行跨域调用?

0 个答案:

没有答案