GWT:如何确保在构建GWT页面后运行javascript
我有一个javascript文件main.js。main.js包含如下内容:GWT:如何确保在构建GWT页面后运行javascript,java,javascript,jquery,gwt,Java,Javascript,Jquery,Gwt,我有一个javascript文件main.js。main.js包含如下内容: $(document).ready(function() { Cufon.replace('#myform p.head', { fontFamily: 'HelveticaNeueLT Std Thin' }); ...... }); <body> <script type="text/javascript" src="js/main.js"></
$(document).ready(function() {
Cufon.replace('#myform p.head', { fontFamily: 'HelveticaNeueLT Std Thin' });
......
});
<body>
<script type="text/javascript" src="js/main.js"></script>
</body>
我想这样做的目的是在加载整个页面后运行此方法,并将更改应用于css元素
但我发现,只有在所有HTML元素之前加载脚本时,这才有效,例如:
<body>
HTML......
<script type="text/javascript" src="js/main.js"></script>
</body>
HTML。。。。。。
但是,如果将此脚本置于所有HTML之上,它将停止工作:
<body>
<script type="text/javascript" src="js/main.js"></script>
HTML......
</body>
HTML。。。。。。
这发生在静态HTML和GWT页面上。因为我的GWT总是将生成的HTML内容放在所有正文内容的末尾,所以脚本总是在HTML之前,因此不起作用。例如,我的GWT HTML模块如下所示:
$(document).ready(function() {
Cufon.replace('#myform p.head', { fontFamily: 'HelveticaNeueLT Std Thin' });
......
});
<body>
<script type="text/javascript" src="js/main.js"></script>
</body>
编译后,从my UIBinding生成的HTML将生成如下HTML页面:
<body>
<script type="text/javascript" src="js/main.js"></script>
Generated HTML....
</body>
生成的HTML。。。。
我的问题是:
非常感谢,但我觉得奇怪的是,当在静态页面(
$(document)中向上移动脚本时,脚本不能按预期工作。ready(…)
应该在运行传递给它的函数之前,等待到达
,即DOMContentLoaded
),这不是它不能与GWT应用程序一起工作的原因(换句话说,您的诊断是错误的)
GWT的onModuleLoad
也在DOMContentLoaded
上运行(或更高版本,但从来没有更早),因此您的应用程序的onModuleLoad
和jQuery的$(document.ready(…)
之间可能存在竞争条件。您可以尝试将GWT应用程序的
放在main.js
之前,但由于onModuleLoad
可能会在DOMContentLoader
之后运行,因此无法保证它会工作(更不用说以交叉浏览器的方式)
我认为您最好删除main.js
或用一个简单的函数替换$(文档)。ready(…)
,并在适合您需要的时刻从GWT应用程序中调用Cufon
(和/或在$(文档)中执行的任何操作)。ready(…)
)(即,将#myform p.head
元素/小部件附加到文档后)
最简单的方法是将脚本放入JSNI方法中,然后在适当的情况下调用该方法。只需确保使用$wnd.Cufon
而不是Cufon
(对于所有其他全局变量也是如此),并将所有出现的文档
替换为$doc
,窗口
替换为$wnd
。
虽然我觉得很奇怪,当在静态页面($(document)中向上移动时,脚本不能按预期工作。ready(…)
应该在运行传递给它的函数之前等待
到达,也就是DOMContentLoaded
),但这并不是它不能与GWT应用程序一起工作的原因(换句话说,你的诊断是错误的)
GWT的onModuleLoad
也运行在DOMContentLoaded
(或更高版本,但绝不更早)上,因此您的应用程序的onModuleLoad
和jQuery的$(文档)之间可能存在竞争条件。就绪(…)
。您可以尝试将GWT应用程序的
放在main.js
之前,但由于onModuleLoad
可能在DOMContentLoader
之后运行,因此无法保证它能正常工作(更不用说以交叉方式)
我认为您最好删除main.js
或用一个简单的函数替换$(文档)。ready(…)
,并在适合您需要的时刻从GWT应用程序中调用Cufon
(和/或在$(文档)中执行的任何操作)。ready(…)
)(即,将#myform p.head
元素/小部件附加到文档后)
最简单的方法是将脚本放入JSNI方法中,然后在适当的情况下调用该方法。只需确保使用$wnd.Cufon
而不是Cufon
(对于所有其他全局变量也是如此),并将所有出现的文档
替换为$doc
,窗口
替换为$wnd
。