JavaFx的Javascript函数侦听器功能
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JavaFx的Javascript函数侦听器功能,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2758字,纯文字阅读大概需要4分钟。
内容图文
![JavaFx的Javascript函数侦听器功能](/upload/InfoBanner/zyjiaocheng/726/1d08e34af66045d28768864b15264671.jpg)
我的公司正在寻求将我们的嵌入式浏览器切换到JavaFx.但是,我们当前的浏览器目前具有侦听javascript函数的功能,并在调用时调用java.它看起来像这样:
embeddedBrowser.registerFunction("ajavascriptFunction", new BrowserFunction() {
public JSValue invoke(JSValue... args) {
//Do callback work
}
});
这不需要修改html端(一个要求),实际上只需要知道javascript函数名称(我可能能够研究更多信息,但这是非常优选的).
无论如何以同样的方式使用JavaFx?
解决方法:
我认为这可以满足您的需求.我从this question借了一个想法来弄清楚javascript:
import javafx.application.Application;
import javafx.concurrent.Worker;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import netscape.javascript.JSObject;
public class JavaScriptFunctionListener extends Application {
@Override
public void start(Stage primaryStage) {
WebView webView = new WebView();
WebEngine engine = webView.getEngine();
engine.getLoadWorker().stateProperty().addListener((obs, oldState, newState) -> {
if (newState == Worker.State.SUCCEEDED) {
addFunctionHandlerToDocument(engine);
}
});
// Just a demo: in real life can load external HTML resource:
engine.loadContent(
"<html><head><script>"
+ "var count = 0 ;"
+ "function someFunction(x) {"
+ " count ++ ;"
+ " document.getElementById(x).innerHTML = 'Count: '+count ;"
+ "}"
+ "</script></head>"
+ "<body>"
+ " <input type=\"button\" value=\"Click Me\" onclick=\"someFunction('display');\"/>"
+ " <div id='display'></div>"
+ "</body>"
+ "</html>"
);
Button registerButton = new Button("Register handler for 'someFunction'");
registerButton.setOnAction(event -> {
registerFunction("someFunction", engine);
// registering the same function twice will break everything
// so don't allow this to happen again:
registerButton.setDisable(true);
});
HBox controls = new HBox(5, registerButton);
controls.setPadding(new Insets(10));
controls.setAlignment(Pos.CENTER);
BorderPane root = new BorderPane(webView, null, null, controls, null);
Scene scene = new Scene(root, 600, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
private void registerFunction(String functionName, WebEngine engine) {
engine.executeScript(
"var fun = " + functionName + " ;"
+ functionName + " = function() {"
+ " app.functionCalled('" + functionName + "');"
+ " fun.apply(this, arguments)"
+ "}"
);
}
private void addFunctionHandlerToDocument(WebEngine engine) {
JSObject window = (JSObject) engine.executeScript("window");
window.setMember("app", this);
}
public void functionCalled(String name) {
System.out.println(name + " was called");
}
public static void main(String[] args) {
launch(args);
}
}
内容总结
以上是互联网集市为您收集整理的JavaFx的Javascript函数侦听器功能全部内容,希望文章能够帮你解决JavaFx的Javascript函数侦听器功能所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。