Базовые классы WebKit

Понимание объектно-ориентированного проекта базовых классов WebKit является основным принципом понимания, как работает WebKit. Можно вывести на экран веб-контент в единственном окне путем выполнения нескольких простых шагов. Обычно, для встраивания веб-контента в приложение Вы просто создаете объект веб-представления, помещаете его в окно и отправляете сообщение запроса загрузки. Однако, если Вы захотите сделать что-то более сложное — например, настроить пользовательский интерфейс, используйте многократные окна, или реализуйте любые другие подобные браузеру опции, такой как назад и передайте кнопки, то — Вы захотите понять лучше, как классы WebKit сотрудничают, чтобы загрузить и вывести на экран веб-контент.

Модель кадра и классы представления

WebKit свободно следует за парадигмой контроллера представления модели — некоторые объекты представляют контроллеры представления, выводящие на экран веб-контент, и другие объекты представляют модели, инкапсулирующие веб-контент.

Ссылка класса веб-представления является базовым классом представления в WebKit. Объекты веб-представления управляют взаимодействиями между объектами Ссылки класса WebFrameView и объектами Ссылки класса WebFrame. Для встраивания веб-контента в приложение Вы создаете объект веб-представления, присоединяете его к окну и просите, чтобы его основной кадр загрузил URL. Наиболее распространенным примером веб-контента является единственный кадр, содержащий многократные типы MIME. WebKit также полностью поддерживает файлы HTML, содержащие составные кадры.

Например, предположите, что веб-страница содержит кадр с двумя дочерними кадрами, как проиллюстрировано на рисунке 1. Для загрузки этой страницы Вы отправляете запрос к основному кадру aWebView, экземпляр веб-представления. Основной кадр подает клиентскую заявку. В то время как это получает ответ сервера (т.е. загружает содержание страницы), основной кадр создает объекты WebFrame инкапсулировать содержание, содержавшееся в каждом элементе кадра. Иерархия объектов WebFrame используется для моделирования всей веб-страницы, где корень вызывают основным кадром.

  Веб-представление рисунка 1 и объекты WebFrameView
WebView and WebFrameView objects

Поскольку содержание для каждого объекта WebFrame загружается, соответствующий объект WebFrameView создается для отображения того содержания. Эти объекты WebFrameView присоединены к иерархии представления WebView. Поэтому существует параллельная иерархия объектов WebFrameView, используемых для рендеринга всей страницы. В этой иерархии объект веб-представления не является только объектом контроллера, но также и корневым представлением. Подробные данные иерархии представления не показаны, потому что они частные к реализации WebKit и могут измениться в будущем.

К счастью, Вы не должны создавать их, модель и представление возражают непосредственно. WebKit создает эти объекты автоматически каждый раз, когда страницы загружаются, или программно или когда пользователь щелкает по ссылке.

Модель данных и классы представления

Как только иерархии кадра создаются, фактическое содержание для каждого кадра должно быть загружено и выведено на экран. Так как веб-страницы могут содержать различные типы MIME, WebKit реализует различные модели и представления для отображения их. WebKit автоматически загружает и выводит на экран большинство общих типов документов (например, HTML, XML, простой текст, изображения и фильмы в формате QuickTime). WebKit выбирает надлежащую модель данных и представление, основанное на объектах на типе MIME документа. Фактически, проект WebKit расширяем, позволяя Вам создать Ваши собственные модели данных и представления для определенных типов MIME.

Рисунок 2 иллюстрирует отношение между WebFrame, Ссылкой класса WebDataSource, представлением документа и объектами представления документа. Для каждого объекта WebFrame существует один объект WebDataSource, загружающий содержание для того кадра. Для каждого объекта WebDataSource существует один объект представления документа, соответствуя протоколу Ссылки на протокол WebDocumentRepresentation, инкапсулирующему данные для определенного типа MIME. Для каждого объекта представления документации существует объект представления документа, соответствуя протоколу Ссылки на протокол WebDocumentView, обрабатывающему дисплей тех данных. Объект представления документа содержится в соответствующем объекте WebFrameView (например, представление документа представления прокрутки, содержавшегося в объекте WebFrameView). Снова, подробные данные иерархии представления не показаны, потому что они частные к реализации WebKit.

Рисунок 2  WebFrame и объекты WebDataSource
WebFrame and WebDataSource objects

Поскольку представление документа и объекты представления являются отдельными, Вы можете иметь многоуровневые модели и представления типа MIME, и расширить WebKit путем определения собственного. Как только источник данных фиксируется (первый байт данных поступил), WebKit выбирает надлежащее представление документа и представление документа, основанное на объектах на типе MIME источника данных. WebKit уже предоставляет модель и объекты представления для большинства общих типов MIME. Если тип MIME не поддерживается, можно предоставить собственную модель и просмотреть объекты обработать тот тип и зарегистрировать их в классе веб-представления. Можно даже заменить модель по умолчанию и просмотреть объекты, несмотря на то, что это не рекомендуется.

Снова, Вы не должны создавать ни один из этих объектов непосредственно — они автоматически создаются, когда загружается страница.

Временный по сравнению с зафиксированными источниками данных

Когда Вы отправляете запрос для загрузки веб-страницы, Вы получаете асинхронный ответ, потому что запрос отправляется к другому процессу на другой машине по сети. Из-за этого WebKit должен обработать состояние своих объектов между временем, заявка подана, и первый байт данных поступает. При использовании WebKit необходимо знать о переходном состоянии объектов источника данных WebKit.

В дополнение к запросам, являющимся асинхронным, много ошибок могут следовать из запроса веб-контента по сети. Например, могут быть отказы сети, плохие строки URL, поврежденное содержание и никакие доступные плагины. Или, можно подать заявку загрузки, но счесть ответ медленным, или задержанным (струйки содержания в).

Например, типичный статический веб-сайт смотрит что-то как то на рисунке 3. Клиентские запросы, соответствуя протоколу HTTP, происходят в веб-браузере пользователя. Эти запросы отправлены по сети к веб-серверу, анализирующему запрос и выбирающему надлежащую веб-страницу для возврата к клиентскому браузеру. Эта веб-страница является просто текстовым файлом, содержащим разметку HTML. Используя команды HTML, встроенные в файле, полученном от веб-сервера, браузер представляет страницу.

Рисунок 3  Типичный веб-сайт
Typical website

В WebKit клиентские запросы загрузки являются асинхронными. Для обработки состояния объектов в течение времени, заявка подана, и содержание поступает, WebKit создает то, что вызывают временным источником данных. Источник данных является временным, потому что еще не известно, загрузится ли страница успешно. Любой существующий источник данных для страницы остается допустимым, пока не проверен временный источник данных. Первый раз, когда объект WebFrame загружается, нет никакого существующего источника данных, и пустая страница выведена на экран.

Источник данных становится зафиксированным, как только поступает первый байт данных. Если временный источник данных становится недопустимым вследствие некоторой ошибки, это никогда переходы к зафиксированному источнику данных. Когда источник данных фиксируется, адаптированное представление документа и представление документа создаются для объекта WebFrame.

Если запрос загрузки перестал работать, Обратите внимание на то, что поведение WebKit по умолчанию ничего не делает. Поэтому необходимо реализовать делегатов веб-представления, чтобы обработать ошибки загрузки (например, вывести на экран или зарегистрировать сообщение).

Делегаты веб-представления

Вы настраиваете поведение WebKit путем реализации делегатов веб-представления, прерывающих запрос и ответные сообщения, и вырабатывающих решения пользовательского интерфейса и политика. Веб-представление использует многократную модель делегата, потому что существует столько аспектов поведения WebKit, которое можно настроить. И для крупных приложений, это целесообразно для различных объектов обработать различные наборы сообщений делегата. Конечно, можно всегда реализовывать всего одного делегата для обработки всех этих областей. Объекты веб-представления имеют четырех делегатов:

Поскольку все делегаты используют неофициальные протоколы, можно установить делегатов и реализовать методы делегата, которые Вы хотите. Если Вы не реализуете метод делегата, WebKit использует реализацию по умолчанию. Например, по умолчанию, о сообщениях об ошибках не сообщают, и новые окна не открыты, когда по ссылке щелкают, что результаты в новом окне запрашивают. Если WebKit не может достигнуть URL, Ваше окно приложения выводит на экран старое содержание, которое может быть пустой страницей. Вы обычно реализуете делегата загрузки кадра для обработки этих типов ошибок.