如何将jcef与intellij一起使用?

qij5mzcb  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(1050)

我一直在想,是否有一种方法可以将chromium浏览器用作java应用程序的ui。我找到了这个intellij页面:https://jetbrains.org/intellij/sdk/docs/reference_guide/jcef.html 我搞不清楚的是我是如何在我的项目中实际使用它的。我的intellij版本是2020.3,它说在2020.2 jcef是默认启用的。然而,我不知道如何在我的项目中使用jcef。我似乎找不到任何明确的文件。例如,当我尝试导入com.intellij时,它找不到包。
在我的intellij项目中是否有集成jcef的教程或指南?

von4xj4u

von4xj4u1#

您可以运行jetty服务器或使用资源提供程序。资源提供者示例:https://medium.com/virtuslab/creating-intellij-plugin-with-webview-3b27c3f87aea
此外,这个抽象webdialog示例还解释了如何将数据传递给fe:https://github.com/sergeysenja1992/xm-online-idea-plugin/blob/master/src/main/kotlin/com/icthh/xm/actions/webdialog.kt
所有魔术类browserpipe(webdialog.kt文件)在后端,和同一类在前端类https://github.com/sergeysenja1992/xm-online-idea-plugin/blob/master/src/main/webapp/src/index.html
下一个js文件是魔法的一部分

<script src="http://registercallback/events.js"></script>

这个js文件不存在,但是可以监听这个请求并返回生成的js代码。

CefApp.getInstance().registerSchemeHandlerFactory("http", "registercallback", InjectJsHandlerFactory(inject()))

有关更多详细信息,请参阅(webdialog.kt文件)中的这行代码
在所有操作之后,我能够以简单的方式编写组件:fe:https://github.com/sergeysenja1992/xm-online-idea-plugin/blob/master/src/main/webapp/src/app/settings/settings.component.ts

constructor(private zone: NgZone) {
    let w: any = window;
    w.messagePipe.subscribe('initData', (res) => {
      console.info('initData', res);
      zone.run(() => {
        this.updateData(res);
      });
    });
    w.messagePipe.post('componentReady', 'SettingsComponent ready')
  }

be公司:https://github.com/sergeysenja1992/xm-online-idea-plugin/blob/master/src/main/kotlin/com/icthh/xm/actions/settings/settingsdialog.kt

override fun callbacks(): List<BrowserCallback> {
    val data = ArrayList(project.getSettings().envs.map { it.copy() })
    this.data = data;
    return listOf(
        BrowserCallback("componentReady") {body, pipe ->
            logger.info("Update ${body}")
            pipe.post("initData", mapper.writeValueAsString(mapOf(
                "updateModes" to updateModes,
                "branches" to project.getRepository().getLocalBranches(),
                "envs" to data,
            )))
        },
        BrowserCallback("envsUpdated") {body, pipe ->
            logger.info("envsUpdated ${body}")
            val envs = mapper.readValue<List<EnvironmentSettings>>(body)
            this.data = ArrayList(envs);
        }
    )
}

相关问题