Как вы решаете эту проблему межсайтового скриптинга Ajax в FireFox 3?
Код отказа в доступе к ограниченному URI: 1012
Ответы (5)
Если вы используете 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) Но это работает только в 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-файла, который будет извлекать данные из Yahoo! Finance, но они обслуживают .csv, поэтому я думаю, что я SOL. — Джимми Чандра (9 сентября, 17:20)
Я надеюсь, что вы найдете это полезным.