2014-05-15 5 views
0

J'essaie de placer des éléments javascript sur ma page, mais les éléments sont définis après le javascript s'exécute sur la page. Ainsi, par exemple, j'ai créé une méthode Console.log() pour afficher des éléments dans ma console Java à des fins de débogage. Mais les éléments sont définis après l'exécution du code de page, ce qui fait que la journalisation ne fonctionne pas (voir le deuxième bloc de code). Y a-t-il un moyen pour moi d'initier le code avant que le javascript sur la page s'exécute?javafx WebView setMember() avant le script

Alors, voici comment j'entreprends l'élément dans mon application 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()); 
    } 
} 

Voici un exemple 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> 

Répondre

1

Vous n'êtes pas laisser le chargement d'arrivée de page avant lancez votre code javascript. Envisagez de lier votre code à la méthode window.onload, par ex.

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

Bien sûr, cela pourrait poser un problème si d'autres parties de votre code tentent également de se joindre à window.onload. I recommend reading this article if this is the case for you. FWIW, j'ai également pris l'exemple de code ci-dessus de cette page.

+0

Le problème a à voir avec le java, pas le javascript –

+1

Cette réponse est correcte. Ryan, vous avez ce problème parce que tout votre code Java est en cours d'exécution après l'évaluation du JavaScript (c'est ce que le programme d'écoute stateProperty garantit). Ainsi, le premier fichier console.log ne fonctionne pas car, lorsqu'il est évalué, la console n'a pas encore été définie. La seconde fonctionne car elle n'est pas évaluée tant que l'événement click ne se produit pas (ce qui est probablement long après l'exécution du code Java). –

Questions connexes