我是新的Google网络工具包。我对JSNI感到困惑。为什么以及何时在Google Web工具包中使用JSNI.Advantage和JSNI.Thanks的限制。
答案 0 :(得分:2)
当没有其他方法对Javascript以外的功能进行编码时,我使用本机Javascript代码。例如,GWT中没有XmlHttpRequest对象的包装器。我可以使用第三方解决方案(如果存在),或者根据网络上找到的基于javascript的示例代码编写我自己的类。所以,我有这个本机方法,我可以从我的纯Java代码调用,只包含Javascript代码。 JSNI允许我在这两个世界之间共享数据。
毕竟,在编译排列之后,Java和JS本机方法都构建到Javascript中。
如果您想使用各种Javascript库,那么JSNI将允许您调用包含在Java方法中的设计方法。例如,您可以将Modernizr.js脚本包含到您的html页面中,然后在您的类中包含类似的内容:
private native boolean isCSSAnimationSupported() /*-{
return Modernizr.cssanimations;
}-*/;
当没有实际需要注入内联Javascript时,我不使用本机方法。
答案 1 :(得分:0)
除了alexp已提到的要点之外,还有另一种情况,即JSNI非常有用。
映像,你有几个GWT应用程序,如果你离开一个并启动另一个,你想要向起始GWT应用程序发送一些信息。
您有几种可能性:
您可以使用网址参数
您可以使用Cookie
或使用JSP和JSNI。
因此,您使用JSP而不是HTML作为主页。在这个JSP中,您可以使用隐藏字段的JSP标记来携带您的参数,使用JSNI,您可以从主页中读取参数。