Pracując przy projekcie w którym kod javascriptowy jest docelowo pisany pod platformy mobilne lub np. ma być wykorzystany w QML-u, nie przejmuję się restrykcjami np. przy tworzeniu komunikacji ajaxowej ze względu na to że aplikacje uruchamiane są na urządzeniach jako ‘natywne’ i nie zakłócają ‘same origin policy’. Przy takim dewelopmencie komunikacje czy nawet aplikacje najszybciej można przetestować było korzystając z Firefoxa włączając do kodu prosty skrypcik
var xmlHttp = new XMLHttpRequest();
/*
* ustawiamy uprawnienia zeby mozna bylo odwolywac sie do innej domeny,
* lub odpalajac komunikacje z lokalnego pliku
*/
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
//wazne zeby open byl zaraz po ustawieniu uprawnien
xmlHttp.open('get,'http://dowolnadomena.com');
Firefox pyta wtedy użytkownika o zgodę na połączenie do domeny i można było spokojnie testować aplikacje dopóki… nie pojawił się Firefox 5
.
Mozilla począwszy od Firefox-a 5 w górę wyłączyła funkcjonalność ‘enablePrivilege’. W tym momencie jedyną opcją żeby dewelopować czy testować taki scenariusz korzystając z Firefoxa 5+ można:
stworzyć własny plugin który dostarcza taką możliwość lub przewertować MDN i bugzille mozilli
i dotrzeć do tego linku https://bugzilla.mozilla.org/attachment.cgi?id=545203
(z wątku bug-a zgłoszonego w powyższej sprawie), gdzie znajduje się Special Powers w formie pluginu dla Firefoxa.
Special Powers jest to zestaw API który normalnie jest częścią Mochitest – frameworka do testów automatycznych używanych do testowania build-ów firefox-a oraz potencjalnych zagrożeń związanych z wykorzystaniem javascriptu czyli wszędzie tam gdzie chcemy żeby nasz skrypt mógł robić to czego nie powinien
. Po zainstalowaniu plugina zobaczymy że pojawi się globalny obiekt SpecialPowers. Teraz możemy zmodyfikować powyższy przykład:
//korzystamy z super mocy ^^
var xmlHttp = SpecialPowers.createSystemXHR();
xmlHttp.open('get,'http://dowolnadomena.com');
i stworzyć obiekt xmlHttpRequest który posiada uprawnienia łączenia się z innymi domenami.
Warto wiedzieć że Special Powers to nie tylko komunikacja ajax kompletną listę ‘super mocy’ znajdziecie tutaj.

“Firefox pyta wtedy urzytkownika o zgodę”