2

我希望将我的 gwt 应用程序编译成一个单一的、整体的、跨浏览器兼容的 .html 文件。最终,我试图通过 gwt 设计一个亚马逊机械土耳其人模板。这些模板必须是单个 .html 文件,因为它们托管在 Amazon 的机器上。.html 文件可以引用外部源,但只能通过绝对地址,因为我无法控制文件层次结构。

我并不担心单一文件的加载速度比为每个浏览器拥有单独的文件要慢。我正在开发一个相当简单的 Web 表单,其中只包含很少有人会看到的客户端代码。因此,速度和跨浏览器的正确性不是主要问题。

我发现通过将以下行添加到我的 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 太混乱了(即使在详细输出模式下也是如此)。是否有如何执行此操作的演练?

我在 OSX 上使用 gwt eclipse 插件。

4

1 回答 1

2

幸运的是,我在发布问题后不久就找到了解决方法: http ://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/79e9634110487490

简而言之,答案是使用跨站点脚本。

  • 将以下行添加到 MODULE_NAME.gwt.xml:

    < add-linker name="xs" />

gwt 将生成 MODULE_NAME.nocache.js 文件以及一些 MD5.cache.js 文件(注意 MD5 文件以 .js 结尾,而不是 .html)。

  • 编译你的应用程序

  • 现在,将所有这些 .js 文件放在服务器 A 上。

  • 修改 MODULE_NAME.html 文件以包含对服务器 A 上 MODULE_NAME.nocache.js 的绝对引用。

  • 将 MODULE_NAME.html 上传到服务器 B。

跨站点链接器使一切正常。

于 2010-10-04T09:49:52.223 回答