Salim
Salim

Reputation: 199

Can't get javafx and webview to handle google javascript

I am having issues getting javafx to listen on google results. I'm sure it's due to the javascript live results but I can't find a way around it.

Document doc = engine.getDocument();
NodeList elements = doc.getElementsByTagName("a");
for(int i=0; i < elements.getLength();i++){
    ((EventTarget) elements.item(i)).addEventListener("click", listener, false);
}

in a chrome browser I'm able to right click the result and Inspect. The DOM shows everything fine. How do I have javafx replicate what a chrome browser can do?

Upvotes: 0

Views: 87

Answers (1)

Salim
Salim

Reputation: 199

I was able to do it like so:

Class1 is the javafx webview application Class2 is a bridge between javascript and java

in class1 i created a method like so. It can be used upon clicking a button.

private void setJSlisteners(){
    Class2 bridge = new Class2();
    JSObject hrefWindow = (JSObject) engine.executeScript("window");
    hrefWindow.setMember("java", bridge);
    engine.executeScript("var links = document.getElementsByTagName(\"a\");"
            + "for (var i = 0; i < links.length; i++) {"
            + "links[i].addEventListener(\"click\", function(){"
                + "java.log(this.getAttribute(\"href\"));"
            + "});"
            + "}");

}

in class2 the log method looks like this.

public void log(String text)
{
    System.out.println(text);
}

Upvotes: 1

Related Questions