【发布时间】:2010-09-08 06:05:51
【问题描述】:
如何在 FireFox 3 上解决这个 Ajax 跨站点脚本问题?
【问题讨论】:
标签: javascript jquery ajax xss
如何在 FireFox 3 上解决这个 Ajax 跨站点脚本问题?
【问题讨论】:
标签: javascript jquery ajax xss
如果你使用 jQuery,它有一个回调函数来解决这个问题:
http://docs.jquery.com/Ajax/jQuery.ajax#options
从 jQuery 1.2 开始,您可以加载 JSON 位于另一个域的数据,如果您 指定一个 JSONP 回调,可以是 这样做:“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的安全问题,这篇文章描述了cause and the solution to access to restricted uri denied" code: "1012 problem。
抱歉,使用 JQuery 时出现该错误 FireFox 3 上的 $.ajax。试过 jsonp 建议,但我认为那只会 使用可以提供服务的东西 json。我正在尝试创建一个示例 基于本地 html 文件的混搭,将 从 Yahoo!Finance 中提取数据,但他们 正在服务.csv,所以我认为我是 SOL。 – Jimmy Chandra(9 月 9 日 17:20)
我希望你会发现它有用。
【讨论】: