从 GWT 中的 jsni 调用外部函数
Invoke external function from jsni in GWT
我在 .js 文件中定义了一个函数,它包含在主 .html 文件中,代码如下:
<script type="text/javascript" language="javascript"
src="js/script.js"></script>
我还有一个调用 js 文件中定义的函数的 JSNI 方法:
public native void addJsModule(String name) /*-{
addNewSection(name);
}-*/;
当我调用 java 方法时,我得到这个异常:
com.google.gwt.event.shared.UmbrellaException: Exception caught: Exception caught: (ReferenceError) @client.registros.home.RegistyHome::addJsModule(Ljava/lang/String;)([string: 'acercade']): addNewSection is not defined
谢谢!!
您必须通过将 javascript 方法存储在共享对象中来使它可用。
一个常用的构造是将方法存储在$doc
中。在 JavaScript 中,像这样保存您的方法:
document.addNewSection = new function(name) {addNewSection(name);};
然后像这样在 GWT 本机方法的 jsni-body 中使用它:
$doc.addNewSection(name);
(如果需要,您也可以将 JSNI $wnd
与 JS window
一起使用)
另请参阅:
- How to run JavaScript function from GWT Java with JSNI?(除了不覆盖参数)
- 官方文档位于:http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html#writing
GWT 代码(默认情况下)在隐藏的 iframe 中运行,您的脚本在该框架中不可用。有一个 $wnd
变量引用封闭浏览上下文(您的脚本已加载的位置)的 Window 对象。因此,您必须在函数前加上 $wnd
前缀,以引用在外部浏览上下文中定义的函数:
public native void addJsModule(String name) /*-{
$wnd.addNewSection(name);
}-*/;
见http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html#writing
Note that the code did not reference the JavaScript window
object directly inside the method. When accessing the browser’s window and document objects from JSNI, you must reference them as $wnd
and $doc
, respectively. Your compiled script runs in a nested frame, and $wnd
and $doc
are automatically initialized to correctly refer to the host page’s window and document.
我在 .js 文件中定义了一个函数,它包含在主 .html 文件中,代码如下:
<script type="text/javascript" language="javascript"
src="js/script.js"></script>
我还有一个调用 js 文件中定义的函数的 JSNI 方法:
public native void addJsModule(String name) /*-{
addNewSection(name);
}-*/;
当我调用 java 方法时,我得到这个异常:
com.google.gwt.event.shared.UmbrellaException: Exception caught: Exception caught: (ReferenceError) @client.registros.home.RegistyHome::addJsModule(Ljava/lang/String;)([string: 'acercade']): addNewSection is not defined
谢谢!!
您必须通过将 javascript 方法存储在共享对象中来使它可用。
一个常用的构造是将方法存储在$doc
中。在 JavaScript 中,像这样保存您的方法:
document.addNewSection = new function(name) {addNewSection(name);};
然后像这样在 GWT 本机方法的 jsni-body 中使用它:
$doc.addNewSection(name);
(如果需要,您也可以将 JSNI $wnd
与 JS window
一起使用)
另请参阅:
- How to run JavaScript function from GWT Java with JSNI?(除了不覆盖参数)
- 官方文档位于:http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html#writing
GWT 代码(默认情况下)在隐藏的 iframe 中运行,您的脚本在该框架中不可用。有一个 $wnd
变量引用封闭浏览上下文(您的脚本已加载的位置)的 Window 对象。因此,您必须在函数前加上 $wnd
前缀,以引用在外部浏览上下文中定义的函数:
public native void addJsModule(String name) /*-{
$wnd.addNewSection(name);
}-*/;
见http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html#writing
Note that the code did not reference the JavaScript
window
object directly inside the method. When accessing the browser’s window and document objects from JSNI, you must reference them as$wnd
and$doc
, respectively. Your compiled script runs in a nested frame, and$wnd
and$doc
are automatically initialized to correctly refer to the host page’s window and document.