GWT bookmarket或GWT作为外部库

Abd*_*aly 5 javascript gwt bookmarklet

我只想通过向DOM添加脚本标记来加载GWT(Google Web Toolkit)应用程序,但是因为GWT链接器使用document.write()我无法找到任何好方法.我在各种博客文章中发现了一些黑客,但他们似乎都失败了最新版本的GWT.我想到任何合理的非侵入性方法吗?

澄清:

在主机html页面中启动GWT应用程序的常规方法:

<script type="text/javascript" language="javascript" src="myapp.nocache.js"></script> 
Run Code Online (Sandbox Code Playgroud)

当然,这会在页面加载后立即启动.我想稍后再做:

function startapp() {
    var head = document.getElementsByTagName('head');
    var s = document.createElement('script');
    s.setAttribute('type', 'text/javascript');
    s.setAttribute('src', 'myapp.nocache.js');
    head[0].appendChild(s);
}
Run Code Online (Sandbox Code Playgroud)

Abd*_*aly 5

这是迄今为止似乎有效的方法:

将其添加到App.gwt.xml的顶部:

<!-- Cross site linker -->
<inherits name="com.google.gwt.core.Core" />
<add-linker name="xs" />
Run Code Online (Sandbox Code Playgroud)

使用上述设置编译应用程序后,修改(或复制)生成的app.nocache.js,如下所示:

1)评论最后的$doc.write...陈述

2)从$doc.write刚刚注释掉的语句中复制此部分并对其进行评估.例:

eval('window.__gwtStatsEvent && window.__gwtStatsEvent({' + 'moduleName:"app", sessionId:window.__gwtStatsSessionId, subSystem:"startup",' + 'evtGroup: "loadExternalRefs", millis:(new Date()).getTime(),' + 'type: "end"});' + 'window.__gwtStatsEvent && window.__gwtStatsEvent({' + 'moduleName:"app", sessionId:window.__gwtStatsSessionId, subSystem:"startup",' + 'evtGroup: "moduleStartup", millis:(new Date()).getTime(),' + 'type: "moduleRequested"});');
Run Code Online (Sandbox Code Playgroud)

3)在此之后添加此行.

document.body.appendChild(document.createElement('script')).src=base + strongName + ".cache.js";
Run Code Online (Sandbox Code Playgroud)

所以你基本上用$doc.write这两行代替了.

现在,您的书签将看起来像:

<a href="javascript:(function(){document.body.appendChild(document.createElement('script')).src='http://abc.com/app.nocache.js';})();">My App</a>
Run Code Online (Sandbox Code Playgroud)