【问题标题】:Does JavaFX8 WebEngine's executeScript("window") method refer to the JavaScript window object?JavaFX8 WebEngine 的 executeScript("window") 方法是否引用 JavaScript 窗口对象?
【发布时间】: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


    【解决方案1】:

    根据this sitewebEngine.executeScript("window") 实际上会返回 JavaScript Window 对象。还有一大堆其他代码 sn-p 好东西要看!

    java 在这种情况下是一个处理程序,可由您的 JavaScript 在 Window 对象中使用。因此,您的 JavaScript 在引用 java 时可以期望访问 DataModel 对象。

    此外,您通常希望在 JavaScript 中使用 location.reload() 刷新页面。

    如果您希望在重新加载之间保存状态,则需要捕获当前 HTML,然后在重新加载完成时使用 WebView 的 loadContent functionality。您还可以获取 WebView 的文档,这样您就可以直接修改任何级别的节点。

    【讨论】:

    • 描述它的最佳方式是 java 是对 DataModel 类实例的引用,当通过 JavaScript 调用时,它将通过 JavaFX 隧道来操作内存中的类实例(因此调用 alert 和您指定的味精)。通过我提供的链接,查看“从 JavaScript 到 JavaFX 的调用”部分。
    猜你喜欢
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    相关资源
    最近更新 更多