您如何在 FireFox 3 上解决这个 Ajax 跨站点脚本问题?
5 回答
如果你使用 jQuery,它有一个回调函数来克服这个问题:
http://docs.jquery.com/Ajax/jQuery.ajax#options
从 jQuery 1.2 开始,如果指定 JSONP 回调,则可以加载位于另一个域中的 JSON 数据,可以像这样:“myurl?callback=?”。jQuery 自动替换 ? 使用正确的方法名称调用,调用您指定的回调。或者,如果您将 dataType 设置为“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问题的原因和解决方案。
抱歉,在 FireFox 3 上使用 JQuery $.ajax 时遇到了该错误。尝试了 jsonp 建议,但我认为这只适用于可以提供 json 的东西。我正在尝试创建一个基于本地 html 文件的示例混搭,该混搭将从 Yahoo!Finance 提取数据,但它们提供 .csv,所以我认为我是 SOL。– 吉米钱德拉(9 月 9 日 17:20)
我希望你会发现它有用。