访问受限制的URI拒绝代码:1012

时间:2008-09-09 06:12:10

标签: javascript jquery ajax xss

如何解决FireFox 3上的Ajax跨站点脚本问题?

5 个答案:

答案 0 :(得分:20)

如果你正在使用jQuery,它有一个回调函数来克服这个问题:

http://docs.jquery.com/Ajax/jQuery.ajax#options

  

从jQuery 1.2开始,您可以加载JSON   数据位于另一个域名(如果您)   指定一个JSONP回调,可以是   像这样做:“myurl?callback =?”。   jQuery自动替换?   使用正确的方法名称来调用,   调用指定的回调。要么,   如果将dataType设置为“jsonp”a   回调将自动添加   到您的Ajax请求。

或者,您可以向服务器端脚本发出ajax请求,然后将数据传回脚本

答案 1 :(得分:6)

更新答案(我想,主要是为了我以后查找此答案时的好处),如果正在加载XML或其他内容,您可以随时询问用户是否允许我们从其他站点读取使用此代码:

try {
    if (netscape.security.PrivilegeManager.enablePrivilege)
        netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
} catch (e) { 
    alert("Sorry, browser security settings won't let this program run."); 
    return; 
}

(来自RESTful Web服务手册)但是,这只适用于firefox,当从本地文件加载html文件时。所以,没那么有用。

答案 2 :(得分:1)

还有一个解决方案:如果您只需要标题,则可以指定“HEAD”作为方法,它不会触发安全问题。例如,如果您只是想知道网页是否存在。

var client = new XMLHttpRequest();
client.open("HEAD", my_url, false);
client.send(null);
if(client.readyState != 4 || client.status != 200) //if we failed
    alert("can't open web page");

答案 3 :(得分:0)

更多细节会很好:你正在使用哪个AJAX库,你想要实现什么,你是怎么做的。

例如,它可以是跨域Ajax请求,这是不允许的。在这种情况下,请使用JSON

答案 4 :(得分:0)

我最近遇到了这个问题,当我作为AJAX加载本地请求时,而不是跨站点脚本问题。此外,吉米自己似乎也有同样的问题。这似乎是FF安全问题,本文介绍了cause and the solution to access to restricted uri denied" code: "1012 problem

  

抱歉,使用JQuery得到了这个错误   FireFox 3上的$ .ajax。试过jsonp   建议,但我认为这只会   与能够提供服务的东西合作   JSON。我正在尝试创建一个样本   将基于本地html文件的mashup   从雅虎财经中获取数据,但他们   正在服务.csv,所以我觉得我是SOL。    - 吉米钱德拉(9月9日17:20)

我希望你会发现它很有用。