HTML5 Оффлайн GWT APP - PullRequest
       1

HTML5 Оффлайн GWT APP

4 голосов
/ 23 июля 2010

Я пытаюсь создать автономное приложение gwt, используя манифест кэша HTML5 и локальное хранилище, но для этого мне нужно создать файл манифеста, в котором перечислены все файлы, созданные GWT, верно?Могу ли я сделать это во время процесса компиляции или это лучше сделать в сценарии оболочки?

Ответы [ 3 ]

5 голосов
/ 23 июля 2010

Это должно быть сделано с помощью компоновщика, чтобы ваши ресурсы автоматически добавлялись в манифест во время компиляции.Я знаю, что существует компоновщик манифеста HTML5-кэша, поскольку группа GWT упоминала его несколько раз, но я не знаю, где находится источник.

Ближайшая альтернатива (и, вероятно, хорошая отправная точка для написаниякомпоновщик HTML5) автономный компоновщик Gears .Офлайновые манифесты Gears очень похожи на HTML5, поэтому, возможно, нужно изменить несколько строк, чтобы заставить их работать.

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

2 голосов
/ 26 апреля 2011

Я просто должен был сделать это на днях на работе.Как и в предыдущем ответе, вам просто нужно добавить компоновщик.Вот пример того, кто создает файл манифеста для пользовательского агента Safari на основе файла шаблона.

// Specify the LinkerOrder as Post... this does not replace the regular GWT linker and runs after it.
@LinkerOrder(LinkerOrder.Order.POST)
public class GwtAppCacheLinker extends AbstractLinker {
  public String getDescription() {
    return "to create an HTML5 application cache manifest JSP template.";
  }

  public ArtifactSet link(TreeLogger logger, LinkerContext context, ArtifactSet artifacts) throws UnableToCompleteException {
    ArtifactSet newArtifacts = new ArtifactSet(artifacts);
    // search through each of the compilation results to find the one for Safari. Then 
    // generate application cache for that file
    for (CompilationResult compilationResult : artifacts.find(CompilationResult.class)) {
      // Only emit the safari version
      for (SelectionProperty property : context.getProperties()) {
        if (property.getName().equals("user.agent")) {
          String value = property.tryGetValue();
          // we only care about the Safari user agent in this case
          if (value != null && value.equals("safari")) {
            newArtifacts.add(createCache(logger, context, compilationResult));
            break;
          }
        }
      }
    }

    return newArtifacts;
  }

  private SyntheticArtifact createCache(TreeLogger logger, LinkerContext context, CompilationResult result)
      throws UnableToCompleteException {
    try {
      logger.log(TreeLogger.Type.INFO, "Using the Safari user agent for the manifest file.");
      // load a template JSP file into a string. This contains all of the files that we want in our cache
      // manifest and a placeholder for the GWT javascript file, which will replace with the actual file next
      String manifest = IOUtils.toString(getClass().getResourceAsStream("cache.template.manifest"));
      // replace the placeholder with the real file name
      manifest = manifest.replace("$SAFARI_HTML_FILE_CHECKSUM$", result.getStrongName());
      // return the Artifact named as the file we want to call it
      return emitString(logger, manifest, "cache.manifest.");
    } catch (IOException e) {
      logger.log(TreeLogger.ERROR, "Couldn't read cache manifest template.", e);
      throw new UnableToCompleteException();
    }
  }
}
1 голос
/ 12 февраля 2013

Используйте генератор GWT Application Manifest библиотеки gwt2go, чтобы сделать именно это. Это было просто. :)

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