我想知道我正在使用的代码片段:
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”这里是标识符,或者我如何调用它?它不完全是实例,所以我不会这样称呼它。
编辑:
这是我的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”。标识符,引用,实例,......?
答案 0 :(得分:3)
根据this site,import os
os.system('mv /projects/project1/project1/file.txt /projects/project1/file.txt')
os.system('rm -rf /projects/project1/project1/')
实际上会返回JavaScript Window对象。还有一大堆其他代码片段好看的东西!
webEngine.executeScript("window")
是一个可以由JavaScript在Window对象中使用的处理程序。因此,引用java
时,您的JavaScript可以访问java
对象。
此外,您通常希望在JavaScript中使用DataModel
刷新页面。
如果您希望在重新加载之间保存状态,则需要捕获当前的HTML,然后在重新加载完成后使用WebView的loadContent functionality。您还可以获取WebView的文档,以便可以直接修改任何级别的节点。