Каков наилучший механизм рендеринга HTML для встраивания в приложение?
На данный момент наше приложение использует компонент Trident Win32, но мы хотим отойти от него по нескольким причинам, главной из которых является наше желание перейти на кроссплатформенность.
Мы смотрим на WebKit и Gecko, но я бы хотел получить отзывы, прежде чем принять решение. Вот некоторые из наиболее важных требований:
Это должно быть относительно быстро, с небольшим следом. В идеале мы могли бы обрезать все, что нам не нужно, без особых усилий.
Достойная документация важна. Я не ожидаю необходимости делать что-то слишком необычное с этим, но вы никогда не знаете.
Мы используем C++ и хотели бы работать с хорошо разработанной объектно-ориентированной архитектурой, если это возможно.
Кроссплатформенность обязательна, и хорошая производительность будет полезна в долгосрочной перспективе (мы можем в конечном итоге портировать на мобильные платформы).
Есть ли какие-то соображения, которые я должен принять во внимание, прежде чем принимать решение? Кто-нибудь работал с 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 недавно была реконструкция, что делает его довольно сопоставимым.