- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以,我知道在 GWT 中我可以编写纯 javascript 代码的 JSNI 代码。但是,不幸的是,如果我在其中使用 ES6 代码,JSNI 代码将无法编译。
这意味着,例如,我不能做这样的事情:
private native void jsniMethod(String jsModule) /*-{
import(jsModule)
.then(loadedModule => {
doStuffWithLoadedModule(loadedModule);
})
.catch(err => alert(err));
}-*/;
有没有办法在 GWT 代码中实现这一点?我的意思是,我需要对 loadModule 的引用,以便我可以在一些 jsni 代码中使用它(doStuffWithLoadedModule 方法实现)。
谢谢!
最佳答案
这是不可能的。您需要将 JSNI 不支持的 JS 功能放入某种外部 JS 中,或者用与 JSNI 兼容的旧 JS 重写它们。考虑将 ScriptInjector 作为此选项或您的主机 html 页面的选项之一。
对于这个特定的事情,您只需要将箭头运算符替换为函数即可:
private native void jsniMethod(String jsModule) /*-{
import(jsModule)
.then(function(loadedModule) {
doStuffWithLoadedModule(loadedModule);
})
.catch(function(err) { alert(err) });
}-*/;
作为替代方案,要使用 java lambda,您可以使用 JsInterop。请记住import
实际上不是函数调用,而是 js 关键字,尽管这应该仍然有效:
@JsMethod(namespace = "<window>")
public native Promise<Object> import(String jsModuleName);
然后,您可以调用它并传入 Java lambda:
private void notJsniMethod(String jsModule) {
import(jsModule)
.then(loadedModule -> {
doStuffWithLoadedModule(loadedModule);
return null;
})
.catch_(err -> {
DomGlobal.alert(err.toString())
return null;
});
}
对原始 JS/JSNI 的更改:
=>
替换为java的->
,其操作方式几乎相同alert(...)
现在是DomGlobal.alert(...)
,因为 java 没有“全局”命名空间return null
是必需的,因为 java 不会让您在需要值时“忘记”返回值。.catch(...)
替换为 .catch_(...)
,因为 Java 不允许将关键字用作标识符关于ecmascript-6 - 如何使用 ECMAScript-6 从 GWT jsni 代码导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60993026/
使用 GWT JSNI JavaScriptObject 和 Element 作为 JSNI 方法的参数类型有什么区别? 考虑以下方法: native void method(JavaScriptOb
是否可以通过这种方式从同一个类中的另一个 native 方法调用 native 方法? public native JavaScriptObject mySECONDJsniMethod(String
我想在我的 gwt 应用程序中调用外部 javascript 函数 当我使用此代码时,它工作正常:我已经导入了javaScript,我可以在客户端的firebug中看到它 public static
我正在尝试在我的 GWT 项目中提供一些函数 Hook : private TextBox hello = new TextBox(); private void helloMethod(String
下面是访问 JS 方法的常用方法: public class JSNIHelper { public static native void errorNotify(String _title,
我有一个文件 jQuery 来创建翻转卡片效果,我将其更改为 JSNI,使用 native 函数但错误。我不知道怎么了。有谁能够帮我? 这是我的 native 功能: public native vo
我正在尝试在我的项目中实现 pickdate.js : http://amsul.ca/pickadate.js/date.htm 当我尝试调用该方法时: private native void ex
我正在尝试将此 JavaScript 代码转换为 JSNI 代码。 脚本导入 脚本 $('#q').typeahead({ minLength: 1, order: "as
我正在构建一个使用 Web SQL 本地存储的 GWT 应用程序 ( http://dev.w3.org/html5/webdatabase/ )。问题是 Web SQL API 使用回调函数作为论据
所以我有一个 GWT 应用程序,我正在尝试调用一个函数来从外部按钮更改应用程序的 View 。通常这被称为“this.internalFunction('string')”。问题是 JSNI 通过静态
我在 GWT 类中有以下代码: private native JavaScriptObject getRequest() /*-{ var request = ...; request
这是我的代码: package com.eggproject_hu.WPECommerceAdminSales.client; import java.lang.Boolean; import com
这是我的代码: package com.eggproject_hu.WPECommerceAdminSales.client; import java.lang.Boolean; import com
我正在开发一个 GWT 应用程序,并且正在获取一个包含选择查询结果的列表。此选择查询有行。每行的每个元素都通过“::”与前一个和下一个元素分隔。 我尝试使用 String.split 拆分它,但需要很
我想为以下 JavaScript 函数编写一个 GWT JSNI 包装函数。 object.cache(config); 其中 config 是具有以下可选参数的对象 - x Number - y N
我想在我的 gwt 代码中创建一个 canvas 元素。随后,我想应用第三方 javascript 库以便在新创建的 canvas dom 元素上进行绘制。所以这是我想做的事情的粗略想法: publi
我正在更改 JSNI 中的 JavaScript 函数,但事件监听器未正确调用。这是代码: private native void alert1()/*-{ $doc.addEventList
考虑以下小部件。我将其中两个添加到我的页面中。第一个的名称为“widget1”,第二个的名称为“widget2”。它只应该给出自己的名称,但由 javascript 调用。 (这个例子没有任何意义,只
我想从 gwt 调用任意 js 函数。函数名将在 functionname 变量中。像这样: private static native String execute(String functionN
html中有一个JavaScript函数 function someFunction(){ return "some text"; } 还有 JSNI: native String
我是一名优秀的程序员,十分优秀!