2014-05-15 23 views
0

我想在頁面上設置一些JavaScript項目,但在頁面上運行javascript後項目正在設置。例如,我創建了一個Console.log()方法來顯示我的Java控制檯中的東西以進行調試。但是頁面代碼運行後,這些項目會被設置,因此日誌記錄不起作用(請參閱第二部分代碼)。有沒有辦法讓我在頁面上的javascript運行之前啓動代碼?javafx WebView在腳本之前設置()

所以,這裏是我如何啓動該項目在我的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

你是不是在你面前讓頁面加載完成運行你的JavaScript代碼。考慮將您的代碼鏈接到window.onload方法,例如

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

當然,這可能會導致一個問題,如果你的代碼的任何其他部分也儘量把自己附加到window.onloadI recommend reading this article if this is the case for you. FWIW,我也從該頁面獲取了上面的代碼示例。

+0

這個問題與java有關,而不是javascript –

+1

這個答案是正確的。 Ryan,你遇到這個問題是因爲所有的Java代碼都在JavaScript被評估之後執行(這是stateProperty監聽器所保證的)。所以第一個console.log不起作用,因爲它的評估控制檯尚未設置。第二個是可用的,因爲直到發生click事件纔會對它進行評估(這可能在Java代碼執行後很長時間)。 –