私は以下のJavascriptをWebエンジンで実行しています。 出典:Execute a Javascript function for a WebView from a JavaFX programJavaFXのJavaScriptからの戻り値
このJavascriptはウェブサイト上の特定の単語を強調表示します。
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<State>() {
@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');");
}
}
});
私は、ウェブサイトは、特定の単語が含まれていると私はそれがうまく働いたとの言葉を強調しているので、このコードは、良い出発点であると思ったかどうか、確認したいです。 私が今必要とするのは、JavaScriptが強調表示されるときにカウントする必要があるということです。 単語が含まれている場合(counter> = 1)、JavaFXでアクセスできるブール値の戻り値を取得します。
私はいくつかのことを試みましたが、実際には、スクリプトの外側にアクセスできるカウンタと戻り値を追加するためにスクリプトをミドル化する方法はわかりません。
ありがとうございます。