Каков наилучший механизм рендеринга HTML для встраивания в приложение?

На данный момент наше приложение использует компонент Trident Win32, но мы хотим отойти от него по нескольким причинам, главной из которых является наше желание перейти на кроссплатформенность.

Мы смотрим на WebKit и Gecko, но я бы хотел получить отзывы, прежде чем принять решение. Вот некоторые из наиболее важных требований:

  1. Это должно быть относительно быстро, с небольшим следом. В идеале мы могли бы обрезать все, что нам не нужно, без особых усилий.

  2. Достойная документация важна. Я не ожидаю необходимости делать что-то слишком необычное с этим, но вы никогда не знаете.

  3. Мы используем C++ и хотели бы работать с хорошо разработанной объектно-ориентированной архитектурой, если это возможно.

  4. Кроссплатформенность обязательна, и хорошая производительность будет полезна в долгосрочной перспективе (мы можем в конечном итоге портировать на мобильные платформы).

Есть ли какие-то соображения, которые я должен принять во внимание, прежде чем принимать решение? Кто-нибудь работал с WebKit или Gecko раньше? Если да, есть ли какие-нибудь статьи или учебники, которые я мог бы найти полезными?

Обновить:

Спасибо за ответы, ребята. Мы закончили с Qt 4.5, который включает в себя WebKit. Мы до сих пор довольны этим, на самом деле, я думаю, что Qt, вероятно, лучшая среда пользовательского интерфейса, которую я когда-либо использовал; Разница между кодированием с помощью собственных API-интерфейсов Win32 и этим ошеломляет. Это также очень легко выучить, единственной серьезной проблемой, с которой мы столкнулись, было привыкание к парадигме сигналов / слотов.

6 ответов

Решение

Небольшая история может помочь в вашем решении. Когда Apple обдумывала, какой механизм использовать для создания Safari, они посмотрели на Gecko, но решили пойти с KHTML, разветвить его и назвали WebKit. Их причина была в том, что у Gecko были тонны устаревшего корабля, оставшегося от Netscape, и он был намного сложнее.

KHTML / WebKit был более новым и, следовательно, имел меньшее наследство. Это было также чище, быстрее и лучше задокументировано.

Одной из целей Firefox 3 было очистить кодовую базу и упростить ее. Из того, что я слышал, они это делали, но я не знаю, как это соотносится с текущими итерациями WebKit. Очевидно, что Google не хватило, когда они сделали Chrome, и у них есть значительная доля в Firefox.

Смотрите здесь для более подробной информации.

Я предвзят, но если вы не возражаете против использования (LGPL-ed) Qt, как насчет использования QtWebKit? Его довольно легко встраивать, кроссплатформенность, хорошая демонстрация веб-браузера, а также другие похожие примеры.

Это зависит от ваших потребностей. Даже Webkit может быть излишним, если вы просто хотите отобразить старый HTML. В некоторых моих приложениях я использую wxHTML. Это компонент из библиотеки wxWidgets (не уверен, что вы можете использовать его без wx). Он легкий, поддерживает только базовые HTML-элементы (некоторая поддержка CSS может быть доступна в следующей версии), и имеет действительно хороший элемент управления wxHtmlEasyPrinting, который обеспечивает хороший предварительный просмотр, а также печатает очень хорошо. Что касается кроссплатформенности, wxWidgets работает на Windows, Linux, Mac и некоторых других системах, так что это, безусловно, соответствует вашим требованиям.

Я не рекомендую идти по дороге Gecko. Его можно интегрировать, но сделать это гораздо сложнее, чем KHTML/Webkit - просто потому, что Gecko не был создан с учетом встраивания.

Я думаю, что я бы предложил Safari/Chrome WebKit, который был основан на KHTML, движке рендеринга Konqueror.

Попробуйте выбрать Webkit, так как он используется многими различными браузерами (Konqueror, Safari и Google Chrome). Это делает Webkit более универсальным и более адаптируемым к другим потребностям.

Разработка Gecko тесно связана с Firefox. Многие изменения, сделанные в Gecko, сделаны потому, что Firefox диктует их. Например, Firefox 3 решил, что он собирается заблокировать все самозаверяющие сертификаты в целях безопасности. Реализация была реализована в движке Gecko, что означает, что к любому приложению, которое решает встроить Gecko, добавлено это ограничение безопасности.

Если вы можете остаться с Webkit, так как это в основном движок рендеринга для HTML-страниц. Это было разработано с намерением быть использованным среди различных веб-браузеров. В то время как Gecko - это, прежде всего, движок рендеринга одного браузера, который просто предлагает API для встраивания.

Я понимаю, что Webkit довольно хорош и меньше, чем Gecko. Предполагается, что у Gecko недавно была реконструкция, что делает его довольно сопоставимым.

Другие вопросы по тегам