在IDEA插件中使用webView

一、加载/显示WebView

  • plugin中需要使用JCEF加载webView
// 创建 JBCefBrowser
        JBCefBrowser jbCefBrowser = new JBCefBrowser();
        // 将 JBCefBrowser 的UI控件设置到Panel中
        this.content.add(jbCefBrowser.getComponent(), BorderLayout.CENTER);
        // 加载URL
        jbCefBrowser.loadURL(YOUR_URL);

js 向 java通信

    1. 在H5中添加以下js:
 <script type="text/javascript">
     function callJava(arg) {
        ;
     }
 </script>
  • 通过 JBCefJSQuery 拦截、接收js侧callJava方法,参考代码:
        JBCefJSQuery query = JBCefJSQuery.create((JBCefBrowserBase) browser);
        query.addHandler((String arg) -> {
            try {
                JSONObject requestAsJson = JSON.parseObject(arg);
                System.out.println("in Handler fast json" + requestAsJson.toJSONString());
                return new JBCefJSQuery.Response("msg");
            } catch (Exception e) {
                return new JBCefJSQuery.Response(null, 0, "errorMsg");
            }
        });

        browser.getJBCefClient().addLoadHandler(new CefLoadHandler() {
            @Override
            public void onLoadingStateChange(CefBrowser cefBrowser, boolean isLoading, boolean canGoBack, boolean canGoForward) {
            }

            @Override
            public void onLoadStart(CefBrowser cefBrowser, CefFrame frame, CefRequest.TransitionType transitionType) {
            }

            @Override
            public void onLoadEnd(CefBrowser cefBrowser, CefFrame frame, int httpStatusCode) {
                System.out.println("onLoadEnd");
                cefBrowser.executeJavaScript(
                        "window.callJava = function(arg) {" +
                                query.inject(
                                        "arg",
                                        "response => console.log('callJava 成功', response)",
                                        "(error_code, error_message) => console.log('callJava 失败', error_code, error_message)"
                                ) +
                                "};",
                        null, 0);
            }

            @Override
            public void onLoadError(CefBrowser cefBrowser, CefFrame frame, ErrorCode errorCode, String errorText, String failedUrl) {
            }
        }, browser.getCefBrowser());
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容