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

有帮助吗?

解决方案

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

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

从jQuery 1.2开始,如果您指定JSONP回调,则可以加载位于另一个域上的JSON数据,可以这样做:“myurl?回调=?”。jQuery 自动替换 ?使用正确的方法名称,请致电指定的回调。或者,如果将数据类型设置为“ JSONP”,则将自动添加到AJAX请求中。

或者,您可以向服务器端脚本发出 ajax 请求,该脚本为您执行跨域调用,然后将数据传递回您的脚本

其他提示

要更新答案(我想,主要是为了我以后寻找这个答案时的好处),如果正在加载 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 文件时。所以,没那么有用。

另一种解决方案:如果您只需要标头,则可以指定“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");

更多细节会更好:您正在使用哪个 AJAX 库,您想要实现什么目标,如何实现。

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

我最近遇到了这个问题,这是当我作为 AJAX 加载本地请求时,而不是跨站点脚本问题。而且,吉米本人似乎也有同样的问题。这好像是FF的安全问题,这篇文章介绍了 访问受限uri被拒绝的原因及解决方案”代码:《1012问题》.

抱歉,使用jQuery $ .ajax在Firefox 3上遇到了错误。尝试了JSONP建议,但我认为这只会与有助于JSON的东西一起使用。我正在尝试创建一个基于本地HTML文件的示例Mashup,该混搭将从Yahoo!财务中获取数据,但它们正在提供.csv,所以我认为我是SOL。– Jimmy Chandra(9 月 9 日 17:20)

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top