2010-07-23 3 views
4

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

ответ

5

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

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

Существует также информативное видео о using GWT linkers to have your app take advantage of HTML5 Web Workers.

2

Я просто должен был сделать это на другой день на работе. Как и в предыдущем ответе, вам просто нужно добавить компоновщик. Вот пример того, который создает файл манифеста для пользовательского агента 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

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

Смежные вопросы