Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript webEngine.executeScript();抛出异常_Javascript_Exception_Javafx - Fatal编程技术网

Javascript webEngine.executeScript();抛出异常

Javascript webEngine.executeScript();抛出异常,javascript,exception,javafx,Javascript,Exception,Javafx,我正在编写一个JavaFX应用程序,它使用WebView和WebEngine(.executeScript()方法)和JavaScript交互 这里,我有来自Medow.java的这部分代码,它加载map.html(包含JavaScript代码),这段代码运行得非常好: add_button.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(Action

我正在编写一个JavaFX应用程序,它使用WebView和WebEngine(.executeScript()方法)和JavaScript交互

这里,我有来自Medow.java的这部分代码,它加载map.html(包含JavaScript代码),这段代码运行得非常好:

add_button.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent ea5) {


            //  webEngine.executeScript("document.fun();");  // For Drawing Shapes
            if (add == false) {

                webEngine.executeScript("document.fun();");  // For Drawing Shapes
                add = true;
            }
//            }
            else {
                webEngine.executeScript("document.reSet();"); // To remove Drawing Shapes
                add = false;
            }

        }
    });
在加载map.html文件的代码下方/之后

所以,现在作为
webEngine.execute(“document.fun();”)
webEngine.executeScript(“document.draw();”)
几乎是相似的,我无法理解有什么区别,它使位于
.setOnAction
块内部和外部,因为WebEngine和webView都声明为全局变量

无法使用HTML的onLoad选项调用document.draw()函数,因为我需要从java向函数draw传递一些值

生成的异常为:

   netscape.javascript.JSException: TypeError: undefined is not a function (evaluating 'document.draw()')
我怎样才能做到这一点?多谢各位


在不断尝试找出原因的同时,我发现使用
webEngine.load()
创建的HTMLDocument对象出于某种原因仅在handle方法内部可见,而在其他地方不可见,即使它是在外部定义的。

这里发生的是,您希望在内容完全加载之前调用JavaScript函数。因此,未定义函数
draw
。因此,唯一的方法是等待页面加载。有两种方法可能被证明是有用的: 在状态上添加changelistener,并在加载成功后执行JavaScript: 字符串htmlURL=。。。 webView.getEngine().load(htmlURL)

现在这个JavaObject在JavaScript中被引用。假设您在类上有一个属于上述类型的
this
的方法:

public void executeOnPageLoaded() {
  ...
}
然后可以从Javascript调用此方法。如果您使用的是jQuery,它可能如下所示:

$( document ).ready(function() {
    console.log( "ready!" );
    app.executeOnPageLoaded();
});
第二种方法更复杂,但从长远来看,可能会给您带来更多的灵活性


当您开始在WebView中使用JavaScript时,最好也在其中使用Firebug lite,因此请调查发生了什么,但主要是找到一种方法来为JavaScript的控制台输出种子。请参见

这里发生的事情是,您希望在内容完全加载之前调用JavaScript函数。因此,未定义函数
draw
。因此,唯一的方法是等待页面加载。有两种方法可能被证明是有用的: 在状态上添加changelistener,并在加载成功后执行JavaScript: 字符串htmlURL=。。。 webView.getEngine().load(htmlURL)

现在这个JavaObject在JavaScript中被引用。假设您在类上有一个属于上述类型的
this
的方法:

public void executeOnPageLoaded() {
  ...
}
然后可以从Javascript调用此方法。如果您使用的是jQuery,它可能如下所示:

$( document ).ready(function() {
    console.log( "ready!" );
    app.executeOnPageLoaded();
});
第二种方法更复杂,但从长远来看,可能会给您带来更多的灵活性

当您开始在WebView中使用JavaScript时,最好也在其中使用Firebug lite,因此请调查发生了什么,但主要是找到一种方法来为JavaScript的控制台输出种子。看

$( document ).ready(function() {
    console.log( "ready!" );
    app.executeOnPageLoaded();
});