使用javafx2搭建简单客户端嵌入浏览器项目(二)

第二篇:封装控件并实现js与java的相互通讯

上一篇:使用javafx2搭建简单客户端嵌入浏览器项目(一)

新建一个WebViewHelp.java

package sample.JSBridge;

import javafx.scene.web.WebEngine;
import javafx.scene.web.WebEvent;
import javafx.scene.web.WebView;
import netscape.javascript.JSException;
import sample.Json.EJsonType;
import sample.Json.GsonHelp;
import sample.Utils.StringUtlis;

public class WebViewHelp {

    private WebView webView;
    private WebEngine webEngine;

    public WebViewHelp(WebView webView) {
        this.webView = webView;
        this.webEngine = webView.getEngine();

        // 此处注册一个事件该事件是javafx提供
        webEngine.setOnAlert((WebEvent<String> event) -> {
            LoadMethod(event.getData());
        });
    }

    /**
     * 加载本地路径
     * @param path
     */
    public void LoadFile(String path) {
        if (StringUtlis.IsNull(path))
            return ;

        if(path.contains("file:///")){
            webEngine.load(path);
        } else {
            String url = String.format("%1$s:///%2$s","file", path);
            webEngine.load(url);
        }
    }

    /**
     * 加载网络路径
     * @param path
     */
    public void LoadHttp(String path) {
        if (StringUtlis.IsNull(path))
            return ;

        if(path.contains("http://") || path.contains("https://")){
            webEngine.load(path);
        } else {
            webEngine.load(String.format("%1$s:///%2$s","https", path));
        }
    }

    /**
     * js触发加载本地方法
     * @param data
     */
    private void LoadMethod(String data) {
        String port = GsonHelp.GetJsonValue("port", data, EJsonType.STRING);
        String returnData = RuntimeReflectasm.MethodCall(
                GsonHelp.GetJsonValue("className", data, EJsonType.STRING),
                GsonHelp.GetJsonValue("method", data, EJsonType.STRING),
                GsonHelp.GetJsonValue("params", data, EJsonType.JSON_OBJ));

        try{
            webEngine.executeScript("JSBridge.onFinish(" + port + ",'" + returnData + "')");
        } catch (JSException e) {
            System.out.println("js异常:"+e.getMessage());
        }
    }
}

这里使用了gson.jar和Reflectasm库,调用如下

@FXML
private void initialize() {
      webViewHelp = new WebViewHelp(webView);
      webViewHelp.LoadFile("D:\\testxxxxxxxxx\\test.html");
}

总结:
第一次接触javafx打算做一个使用web技术做桌面应用的框架,其中的部分提供参考与思路,如果觉得有更好的思路与建议欢迎提供,对了千万不要说java不适合做客户端。

—-源码下载—-

发布了6 篇原创文章 · 获赞 2 · 访问量 5613

猜你喜欢

转载自blog.csdn.net/u010766458/article/details/80506663