Java[Перевод] WebKit for SWT (Win32 only) Developer Guide (Part 2)

Продолжение перевода. (Первая часть)
6.1 Settings

WebKitBrowser продоставляет следующий settings API для управлением операциями браузера:

getUserAgent()
setUserAgent(aUserAgentString)
setProfileFolder(aFile)
getCookie(aCookieName,aURLString)
getCookieNames(aURLString)
setCookie(aCookieString,aURLString)
deleteCookie(aCookieName,aURLString)

Cookie методы работают с текстовым преставление cookie, например, «cookieName=value». Подробно это описано в javadoc`е WebKitBrowser.
6.2 Navigation Services
WebKitBrowser предоставляет следующий navigation API для загрузки страницы и навигации с помощью кнопок «Вперед» «Назад» по истории браузера.

setUrl(aUrlString)
back()
isBackEnabled()
forward()
isForwardEnabled()
refresh()

back() и forward() методы — асинхронные и могут использоваться вместе с LocationListener или ProgressListener, для подробностей смотрте описанные ниже Event Services. refresh() метод перезагружает текущую страницу.
6.3 Rendering Services
Вместе с тем чтобы обрабатывать содержимое полученное от навигационных сервисов (navigation service), WebKitBrowser может загрузить HTML код используя метод:
setText(htmlSrc)

Этот метод обработает и отобразит поддерживаемые htmlSrc строки. Эта операция позволяет приложению сгенерировать HTML содержимое с JavaScript функциональностью, а потом отобразить нужным вам образом.
6.4 Event Services

Многие из сервисов WebKitBrowser исполняются асинхронно. Например, при вызове webKitBrowser.setUrl(aUrl) , вместо блокировки UI в ожидании загрузки, браузер начинает загружать контект в отдельном потоке и возвращает управление практически мгновенно. Для всех асинхронных операций WebKitBrowser предоставляет управление событиями.


Ниже представлены интерфейсы и их основные методы для мониторинга асинхронными событиями браузера:
OpenWindowListener — open(WebKitWindowEvent)
CloseWindowListener — close(WindowEvent)
LocationListener — changing(LocationEvent), changed(LocationEvent)
ProgressListener — changing(ProgressEvent), completed(ProgressEvent)StatusTextListener — changed(StatusTextEvent)TitleListener — changed(TitleEvent)VisibilityWindowListener — show(WindowEvent), hide(WindowEvent)

Меню браузера реализовано не асихронно, и позволяет вам изменять меню, до показа или обрабатывать его события немедленно.
BrowserMenuEventListenerbeforeMenuShow(BrowserMenuEvent),
menuItemAction(BrowserMenuItemActionEvent),
menuItemName( BrowserMenuItemActionEvent )

Посмотрите раздел «Известные Проблемы» чтобы узнать больше о проблемах и ограничениях следующих событий: WebkitWindowEvent, ProgressEvent, StatusTextEvent и VisibilityWindowEvent.
6.5 DOM и JavaScript

JavaScript API предоставляет возможность исполнять JavaScript функции или scriptlet`ы в текущем документе. Это основной механизм доступа и управления DOM. Чтобы выполнить JavaScript функцию используйте:
execute(theJavaScriptSrc) — returns boolean; true if success; false otherwise
evaluate(theJavaScriptSrc) — returns simple Object of type: String, boolean, int, double, void

Поддрежка API прямого доступа к DOM запланирована в следующем релизе.


WebKitBrowser так же предоставляет handler для JavaScript событий.

getJSAlertHandler()
setJSAlertHandler(aJSAlertHandler)



6.6 Plugin Management
Сейчас WebKit для SWT поддерживает большинство плагинов Chromium`а, таких как Flash, пока ещё нет API для разработки планинов и управления ими из Java.

7.0 Технические детали
Java Native Interface (JNI) позволяет WebKitBrowser контролировать Chromium фреймворк и получать асинхронные события. Мы используем измененную версию  C++ Chromium Embedded Framework, чтобы упростить встраиваемость и использование движка Chromium WebKit. Интеграция C++ достигается с помощью двух библиотек (DLL), webkit4swt-x.y.z.dllи icudt38.dll. Они подгружаются либо из пути отпределяемом JVM java.library.pathили из подключаемого JAR-архива webkit4swt(они извлекаются в временный каталог во время исполнения). Затем они загружаются системой загрузки DLL. В Vista временный каталог <user_home>/appdata/local/temp.
7.1 Отличия от Chrome
Несмотря на то что WebKit для SWT основан на Chromium, он не использует мультипроцессной архитектуры браузера Google Chrome. Вместо этого каждый экземпляр WebKitBrowser работает в том же потоке что и ваше основное приложение. Плагины так же подгружаются в текущий процесс приложения.

WebKit для SWT использует движок SquirrelFish Extreme JavaScript вместо Google V8. Разница в их производительности достаточно мала.
8.0 Получение исходников
Исходный код WebKit для SWT доступен через анонимный CVS доступ.

pserver:anonymous@opensource.genuitec.com:/home/cvs/public/eclipse/blinki
Весь код структурирован в следующие проекты:
com.genuitec.blinki.webkit4swt — Eclipse feature project
com.genuitec.blinki.webkit.swt — Eclipse Java plugin project
com.genuitec.blinki.webkit.swt.win32 — Eclipse Java plugin fragment project
Прочитайте файл README_CLASSPATH в проекте com.genuitec.blinki.webkit.swt чтобы узнать как нужно настроить classpath вашего проекта, чтобы разрабатывать плагины или Java SWT приложения.

9.0 Известные проблемы
  1. ProgressListener
    1. #changed() вызывается как только браузер начинает изменять состояние. Никогда не вызывается после.
    2. ProgressEvent никогда не обновляются
  2. StatusTextListener#changed() никогда не вызывается так как status text не поддерживается в WebKit
  3. VisibilityWindowListener.hide() никогда не вызывается
  4. OpenWindowListener – следующие свойства WindowEvent не поддерживаются:
    • addressBar
    • menuBar
    • statusBar
    • toolBar
  5. Browser leak ( http://code.google.com/p/chromiumembedded/issues/detail?id=15)


Спасибо за терпение, если до сюда кто-то дочитал.

Комментарии (0)

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.