在一个大型的GWT项目中,是否有可能在运行时懒加载一些JavaScript代码,就像叠加层一样? 比如叠加层。
PS:使用iframe并不是解决方案。
在一个大型的GWT项目中,是否有可能在运行时懒加载一些JavaScript代码,就像叠加层一样? 比如叠加层。
PS:使用iframe并不是解决方案。
请查看下面的Google I/O演讲以及GWT.runAsync
,介绍了在GWT
项目中如何懒加载JavaScript
。
我想这就是你要找的。
<body onload="onloadHandler();">
<script type="text/javascript">
function onloadHandler() {
if (document.createElement && document.getElementsByTagName) {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = './test.js';
var heads = document.getElementsByTagName('head');
if (heads && heads[0]) {
heads[0].appendChild(script);
}
}
}
function iAmReady(theName) {
if ('undefined' != typeof window[theName]) {
window[theName]();
}
}
function test() {
// stuff to do when test.js loads
}
</script>
-- 测试.js
iAmReady('test');
已在Firefox 2、Safari 3.1.2 for Windows、IE 6和Opera 9.52中进行了测试并且可用。我认为这些的升级版本也应该可以使用。
请注意,加载是异步的。如果您在调用appendChild()
后立即尝试使用加载文件中的函数或变量,则很可能会失败,这就是为什么我在加载的脚本文件中包含了一个回调,它会在脚本加载完成时强制运行初始化函数。
您还可以在加载的脚本底部调用内部函数,在加载完成后执行某些操作。
GWT不容易支持这个功能,因为所有加载模块所需的Java代码(或者可能需要的Java代码)都被编译成一个单独的JavaScript文件。虽然这个单独的JavaScript文件可能很大,但对于非平凡的模块来说,它比手写的等效JavaScript文件要小。
您是否有一个场景,其中单个生成的JavaScript文件太大了?