【发布时间】:2016-08-04 14:42:56
【问题描述】:
我想知道我正在使用的这段代码 sn-p:
WebView webView = new WebView();
JSObject jsobj;
webEngine = webView.getEngine();
try {
webEngine.load(getClass().getResource("index.html").toExternalForm());
} catch (Exception e) {
e.printStackTrace();
}
try {
jsobj = (JSObject) webEngine.executeScript("window");
jsobj.setMember("java", new DataModel());
} catch (Exception e) {
e.printStackTrace()
}
这一行webEngine.load(getClass().getResource("index.html").toExternalForm()); 将我的index.html 加载到WebView 中。由于它是一个单页应用程序,这就是我所需要的,并且没有更多关于它的问题。
现在回到标题中的问题:
这行是否:jsobj = (JSObject) webEngine.executeScript("window"); 将JSObject 引用设置为"window object" as it's defined by w3school?
意味着jsobj 现在等于窗口对象,表示浏览器中打开的窗口 ?
如果是这样:如果我在WebView 的上下文菜单上使用“重新加载页面”,这是否可能是我的应用程序无法工作的原因,因为它会生成一个新的window object?
额外问题:在我的 JavaScript 中,我可以使用 java.methodName(); 访问模型,这里是“java”一个 identifier 或者我该如何称呼它?它不完全是一个实例,所以我不会这样称呼它。
编辑:
这是我的 Java 类:
public class DataModel{
public void alert(String msg) {
System.out.println(msg);
}
}
通过嵌入在index.html 中的JavaScript,我可以调用java.alert("hello world"); 来打印hello world。由于我将模型引用传递给window object,因此我的JavaScript 中的每个函数都可以访问DataModel.class。从JavaScript来看:就是“java”。标识符、引用、实例……?
【问题讨论】:
标签: javascript java javafx webview jsobject