Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ajax_v_deystvii.pdf
Скачиваний:
34
Добавлен:
05.03.2016
Размер:
5.83 Mб
Скачать

Рис. 13.11. Работа показанного в окне приложения чтения RSS-лент приостановлена, поскольку центральная кнопка имеет название RESUME

13.6.Как избежать ограничений проекта

Спомощью основанного на Ajax приложения мы можем читать RSS-ленты из HTML-файла, записанного на рабочем столе, не требуя серверного кода. Данное приложение можно использовать для захвата RSS-лент без посещения соответствующих Web-сайтов. Мы можем предложить посетителям нашего Web-сайта загрузить данную HTML-страницу, настроив ее на чтение RSSлент этого сайта. Поскольку представленный сценарий можно запустить и на самом Web-сайте, его можно использовать и для других целей. Например, это может быть переключение рекламы в баннере, баннер новостей компании или все, что мы можем придумать. Однако представленный сценарий обладает определенными ограничениями; кроме того, при его запуске на рабочем столе

спомощью браузера Mozilla могут возникнуть определенные проблемы.

13.6.1. Обход системы безопасности браузеров Mozilla

В отличие от Microsoft Internet Explorer, браузеры Firefox и Mozilla не позволяют запускать созданное приложение с рабочего стола из-за встроенных ограничений безопасности. Данные ограничения не дают Ajax общаться с другими Web-сайтами, поскольку направлены на то, чтобы код не мог отправлять информацию без нашего ведома.

Чтобы убедиться, что проблема работы сценария связана именно с этим, необходимо исследовать сообщение об ошибке. В браузере Mozilla мы должны открыть консоль JavaScript, вызываемую из меню Tools =?• Web Development =Ф- JavaScript Console (Инструменты => Web-разработка =Ф Консоль JavaScript) (рис. 13.12).

546 Часть IV Ajax в примерах

Рис. 13.12. В браузере Mozilla

выберите T o o l s

=> Web

Development

=>

J a v a S c r i p t

C o n s o l e

(Инструменты =^

Web-разработка =$>

Консоль J a v a S c r i p t )

Рис. 13.13. Сообщение об ошибке "недостаточно полномочий", порожденной объектом

X M L H t t p R e q u e s t

Выбрав команду JavaScript Console (консоль JavaScript), мы открываем дополнительное окно (рис. 13-13).

На рис. 13.13 показана ошибка "permission denied" ("недостаточно полномочий"), порожденная объектом XMLHttpRequest. Исправить ее можно двумя способами. Например, можно открыть конфигурационный файл браузера Mozilla и изменить настройки разрешений, позволив объекту XMLHttpRequest выполнить то, что он хочет. Для этого в адресной строке браузера следует ввести about: conf ig и изменить необходимые настройки, однако данные действия небезопасны.

Небезопасность изменения настроек связана с тем, что наши разрешения касаются всего, что происходит на компьютере. Это означает, что любой сценарий, желающий связаться с внешним миром, сможет это сделать. Как этого можно избежать, разрешив данное общение только нашему сценарию? В качестве решения мы можем установить безопасность с помощью JavaScript. О том, как это сделать, при условии, что браузер настроен на обработку запросов к PrivilegeManager, мы рассказывали в главе 7. Напомним кратко, о чем идет речь. В листинге 13.18 показан общий код, который предоставляет

дополнительные привилегии, требуемые для чтения внешних ресурсов.

 

•:;:. Листинг 13.18. Управление привилегиями Security Privilege Manager

 

if(window.netscape &&

 

window.netscape.security.PrivilegeManager.enablePrivilege)

 

netscape.security.PrivilegeManager.enablePrivilege(

 

'UniversalBrowserRead1 );

В приведенном коде проверяется, можем ли мы обращаться к Privilege-

 

Manager. Если да, тогда мы получаем привилегию UniversalBrowserRead.

 

Данный код необходимо добавить в два различных места объекта Content-

 

Loader, отвечающего за функциональные возможности Ajax.

 

Вначале мы должны вставить указанный код сразу после объявления

 

loadXMLDoc, как показано в листинге 13.19.

 

Глава 13 Создание приложений Ajax, не использующих сервер 547

Рис. 13.14. Запрос, требующий от пользователя подтвердить изменение прав доступа

Листинг 13.19. Вставка "кода т функцию loadXMLDoc

net.ContentLoader.prototype.loadXMLDoc = function( url,method,params,contentType){

if(window.netscape && window.netscape.security.PrivilegeManager.enablePrivilege) netscape.security.PrivilegeManager.enablePrivilege(

'UniversalBrowserRead1); _

Кроме того, код необходимо вставить в функцию onReadyState (ли-

стинг 13.20).

 

Либтинг 13.20, Вставка кода в функцию onReadyState

И М Я

net.ContentLoader.onReadyState=function(){

 

if(window.netscape &&

 

window.netscape.security

 

.PrivilegeManager.enablePrivilege)

 

netscape.security.PrivilegeManager

 

.enablePrivilege('

 

UniversalBrowserRead');

д

Обе указанные функции взаимодействуют с данными из внешнего мира. Именно поэтому мы должны ввести обозначенные фрагменты в обоих местах. При выполнении сценария мы получаем сообщение-запрос, требующее подтверждения изменений настроек безопасности (рис. 13.14).

Если просто щелкнуть на кнопке Allow (Разрешить), запрос будет открываться при каждом вызове функции. Чтобы избежать этого, необходимо

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]