Я создаю базовое приложение AJAX GWT (Google Web Toolkit), и теперь я пытаюсь создать моментальные снимки для сканеров, читающих эту страницу.
Я создаю Servlet для ответа на сканеры, используя HtmlUnit.
Мое приложение отлично работает, когда я нахожусь в браузере. Но когда в HtmlUnit, он бросает много ошибок об особых символах, которые у меня есть в HTML. Но эти символы довольны, и я не хотел бы заменять его специальными кодами, когда он в настоящее время работает, только из-за HtmlUnit. (по крайней мере, я должен проверить, если я правильно использую HtmlUnit)
Я думаю, что HtmlUnit должен прочитать информацию о кодировке страницы и отобразить ее в качестве браузера, как только это станет целью проекта, который я думаю.
Я не нашел хорошей информации об этой проблеме. Это ограничение HtmlUnit? Нужно ли мне изменять весь контент моего сайта, чтобы использовать эту библиотеку java для создания моментальных снимков?
Вот мой код:
if ((queryString != null) && (queryString.contains("_escaped_fragment_"))) {
// ok its the crawler
// rewrite the URL back to the original #! version
// remember to unescape any %XX characters
url = URLDecoder.decode(url, "UTF-8");
String ajaxURL = url.replace("?_escaped_fragment_=", "#!");
final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_24);
HtmlPage page = webClient.getPage(ajaxURL);
// important! Give the headless browser enough time to execute JavaScript
// The exact time to wait may depend on your application.
webClient.waitForBackgroundJavaScript(3000);
// return the snapshot
response.getWriter().write(page.asXml());
Проблема заключалась в объединении XML с HTML. Комментарии @ColinAlworth помогли мне.
Я последовал примеру Google и не работал.
Для этого вам нужно удалить теги XML и позволить только HTML отвечать, меняя строку:
// return the snapshot
response.getWriter().write(page.asXml());
в
response.getWriter().write(page.asXml().replaceFirst("<\\?.*>",""));
Теперь это рендеринг.
Но, хотя он отображается, CSS не работает, а DOM не обновляется (GWT обновляет заголовок страницы при открытии страницы). HTMLUnit бросил много ошибок в CSS, и я использую twitter bootstrap без каких-либо изменений. По-видимому, в проекте HtmlUnit есть много ошибок, хороших для небольших тестов, но не для синтаксического анализа сложных (или даже простых) HTML файлов.