脚本之前的javafx WebView setMember()

时间:2014-05-15 19:33:54

标签: java javascript javafx

我正在尝试在我的页面上设置一些javascript项目,但是javascript在页面上运行后项目已经设置好了。例如,我创建了一个Console.log()方法来在我的java控制台中显示内容以进行调试。但是在页面代码运行之后项目就会被设置,因此日志记录不起作用(参见第二块代码)。有没有办法让我在页面上的javascript运行之前启动代码?

所以,这就是我在Java应用程序中启动项目的方法:

webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>(){
    if(newState.equals(Worker.State.SUCCEEDED)){
        JSObject win = (JSObject)Browser.webEngine.executeScript("window");
        win.setMember("$js", new JavaScriptBinder());
        win.setMember("console", new JSConsole());
    }
}

这是一个javascript示例:

<script>
    // This line doesn't work:
    console.log("Hello");

    element.addEventListener("click", function(){
        // This line does work:
        console.log("Hello from a click");
    });
</script>

1 个答案:

答案 0 :(得分:1)

在运行javascript代码之前,您不会让页面完成加载。考虑将您的代码链接到window.onload方法,例如

<script>
   function startup() {
      alert("The page has finished loading!  I'm ready to do stuff!");  
   }
   window.onload=startup;
</script>

当然,如果您的代码的任何其他部分也尝试将自己附加到window.onload,这可能会导致问题。 I recommend reading this article if this is the case for you. FWIW,我还从该页面上获取了上面的代码示例。