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)
这是迄今为止似乎有效的方法:
将其添加到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)