GWT компилировать в один монолитный кросс-браузерный HTML-файл - PullRequest
2 голосов
/ 04 октября 2010

Я хочу скомпилировать мое приложение gwt в один монолитный кросс-браузерный совместимый файл .html. В конце концов, я пытаюсь создать шаблон механического турка Amazon через gwt. Эти шаблоны должны быть одним файлом .html, поскольку они размещены на компьютерах Amazon. Файл .html может ссылаться на внешние источники, но только по абсолютному адресу, поскольку я не контролирую файловую иерархию.

Меня не волнует, что монолитный файл будет загружаться медленнее, чем отдельные файлы для каждого браузера. Я разрабатываю довольно простую веб-форму, содержащую только клиентский код, который увидят очень немногие. Таким образом, скорость и кросс-браузерная корректность не являются главными проблемами.

Я обнаружил, что, добавив следующую строку в мой MODULE_NAME.gwt.xml, я могу создать один файл javascript, который работает исключительно для одного браузера (например, firefox, как показано ниже):

<set-property name="user.agent" value="gecko">

Затем я вставляю сгенерированный код в мой файл .html, и он работает для одного указанного браузера. К сожалению, когда я пытаюсь открыть файл .html в других браузерах, сгенерированный gwt javascript не загружается.

Есть ли команда компоновщика, которую я могу добавить к этому файлу, который поможет? Я пытался вызвать SingleScriptLinker через:

  <add-linker name="sso" />

но получил следующую ошибку:

[ОШИБКА] Модуль должен иметь точно одна отдельная перестановка при использовании компоновщик единственного сценария.

Я также пытался настроить содержимое сгенерированных файлов javascript, чтобы сделать их достаточно совместимыми для встраивания в файл .html, но сгенерированный gwt javascript слишком запутан (даже в режиме детального вывода). Есть ли пошаговая инструкция, как это сделать?

Я использую плагин gwt eclipse для OSX.

1 Ответ

2 голосов
/ 04 октября 2010

По счастливой случайности, я нашел обходной путь вскоре после публикации своего вопроса: http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/79e9634110487490

Короче говоря, ответ заключается в использовании межсайтового скриптинга.

  • Добавьте следующую строку в MODULE_NAME.gwt.xml:

gwt сгенерирует файл MODULE_NAME.nocache.js, а также некоторые файлы MD5.cache.js (обратите внимание, что файлы MD5 оканчиваются на .js, а не .html).

  • Скомпилируйте ваше приложение

  • Теперь поместите все эти файлы .js на сервер A.

  • Измените файл MODULE_NAME.html, чтобы он содержал абсолютную ссылку на MODULE_NAME.nocache.js на сервере A.

  • Загрузить файл MODULE_NAME.html на сервер B.

Кросс-сайт линкер заставляет все работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...