XMLHttpRequest со специальными символами в расширении Safari не работает - PullRequest
2 голосов
/ 23 июня 2010

Я пытаюсь создать расширение для Safari, которое аутентифицируется с помощью http://myphotodiary.com's API.И это хорошо работает, для всех паролей, которые не содержат специальных символов, таких как:

å, ä, ö и пробел

У меня сейчас работает следующий код:

var xmlHttp = new XMLHttpRequest();

var url = "https://api.myphotodiary.com/user_status.json?api_key=66217f993f25a8a05dd72970473aa2227450dcad";

var username = "iphone";
var password = "bdbiphone123";

var authy = Base64.encode(username+":"+password);

xmlHttp.open('GET', url, true);
xmlHttp.setRequestHeader("Authorization", "Basic " + authy);
xmlHttp.onreadystatechange = function(){
if (xmlHttp.readyState == 4){
    var data;
    eval("data="+xmlHttp.responseText);
    console.log(data);
}
};
xmlHttp.send(null);

Этот код отлично работает для всех паролей, которые не включают в себя специальные символы, но если я изменю информацию для входа в систему на

var username = "blpninja";
var password = "./ hejä";

, он начнет отказывать.

Этоточный код работает в Safari, но не тогда, когда я помещаю его в расширение.

Я также попробовал встроенную аутентификацию xmlHttpRequest.open

xmlHttp.open('GET', url, true, username, password);

с тем же результатом.

Это моя глава глобальной страницы:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

</head>

Я получаю сообщение "Не удалось загрузить ресурс: отменено", и это заголовки, которые Safari отправляет:

Authorization:Basic YmxwbmluamE6Li8gaGVqw6Q=
Content-Type:text/xml; charset=utf-8
User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; sv-se) AppleWebKit/533.16 (KHTML, like Gecko)

1 Ответ

2 голосов
/ 23 июня 2010

Не уверен, и нет времени углубляться в это, но, может быть, поможет кодирование строк?

var username = encodeURIComponent("blpninja"), //=> sends: blpninja
    password = encodeURIComponent("./ hejä");  //=> sends: .%2F%20hej%C3%A4

на стороне сервера это может быть декодировано (decodeURIComponent)

...