从JavaFX程序为WebView执行Javascript函数

我试图从Java程序执行Javascript函数。 Javascript函数获取HTML文件的内容并突出显示特定单词的出现。

是否可以从webview对象调用Javascript函数?

要在WebView运行javascript,您可以使用WebEngine.executeScript()方法。

并且有很多方法可以通过javascript突出显示文本。 例如, 突出显示HTML文本中的单词(但不是标记)

全部一起:

  WebView webView = new WebView(); final WebEngine engine = webView.getEngine(); engine.load("https://stackoverflow.com/questions/14029964/execute-a-javascript-function-for-a-webview-from-a-javafx-program"); engine.getLoadWorker().stateProperty().addListener( new ChangeListener() { @Override public void changed(ObservableValue ov, State oldState, State newState) { if (newState == State.SUCCEEDED) { engine.executeScript( "function highlightWord(root,word){" + " textNodesUnder(root).forEach(highlightWords);" + "" + " function textNodesUnder(root){" + " var n,a=[],w=document.createTreeWalker(root,NodeFilter.SHOW_TEXT,null,false);" + " while(n=w.nextNode()) a.push(n);" + " return a;" + " }" + "" + " function highlightWords(n){" + " for (var i; (i=n.nodeValue.indexOf(word,i)) > -1; n=after){" + " var after = n.splitText(i+word.length);" + " var highlighted = n.splitText(i);" + " var span = document.createElement('span');" + " span.style.backgroundColor='#f00';" + " span.appendChild(highlighted);" + " after.parentNode.insertBefore(span,after);" + " }" + " }" + "}" + "\n" + "highlightWord(document.body,'function');"); } } }); Scene scene = new Scene(webView, 500, 500); primaryStage.setTitle("Hello World!"); primaryStage.setScene(scene); primaryStage.show(); 

你有没有在这里查看过

脚本指南。

您可以使用ScriptEngine来执行javascript。 初始化ScriptEngine,然后加载脚本并对其进行评估,如下面提到的代码所示

 ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("JavaScript"); // JavaScript code in a String String script = "function hello(arg) { print(arg); }"; // evaluate script engine.eval(script);