【问题标题】:GWT library with external Javascript script带有外部 Javascript 脚本的 GWT 库
【发布时间】:2012-10-05 12:30:26
【问题描述】:

我为 javascript 可视化库 (dygraphs) 编写了一个 GWT 库。
这是一个简单的包装器,使用 JavascriptObjectJSNI 调用 dygraphs 代码。
到目前为止,我已经在我的 GWT 的模块 xml 文件中包含了 dygraphs.js 脚本并且它工作正常 美好的。

但是,当我最近尝试使用 SuperDevMode 时,我不得不切换到不允许脚本标签的 xsiframe linker
使用跨站点链接器在 GWT 库中包含外部 javascript 脚本的最佳做法是什么?

我能想到的最好的办法是将 Javascript 文件作为 TextResource 包含在 ClientBundle 中,然后使用 ScriptInjector 包含它?

这是推荐的方法还是有更好的方法?

我必须确保 dygraphs.js 已完全加载,然后我的使用 GWT 包装器的应用程序才能访问它。

【问题讨论】:

    标签: javascript gwt


    【解决方案1】:

    将您的外部 javascript 作为 TextResource 并自己注入是确保其与您的应用程序一起加载的一种非常好的方法。 (并且您在受益于 GWT 缓存机制的同时节省了额外的 http 请求)

    如果您在瘦客户端上运行,您可能希望将 DOM 中的实际注入与解析分开,如果您从上到下注入带有注释的 textresource,然后稍后将其删除,则可以轻松做到这一点。

    【讨论】:

    • 更好的办法是把它放到 JSNI 中,让编译器对其进行破解,执行简单的重命名和内联。唯一需要注意的是,如果库使用 with - GWT JSNI 不支持 with
    • 只有 gwt 2.5 优化了生成的 javascript 所有低于 2.5 的东西都没有
    • 感谢您的反馈。我基本上遵循以下方法 (stackoverflow.com/questions/8744663/…),但我使用内联 javascript 脚本而不是异步请求。
    • 只有 2.5 能够调用 Closure 编译器,但 com.google.gwt.dev.jjs.JavaToJavaScriptCompiler.optimizeJs(JJSOptions, JsProgram) 确实在 2.4 和一些更早版本中对 JS AST 进行了破解。只有简单的事情 - 将 if 语句重写为三元、实习字符串等,但它仍然可以运行。
    • @DanielKurka 查看gist.github.com/3840254 作为一些关闭前优化的快速示例
    猜你喜欢
    • 1970-01-01
    • 2011-10-30
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    相关资源
    最近更新 更多