List icon 目录

从 7.16 到 7.17

在这份迁移指南中,我们描述了 7.17 版本中已移除的 API,以及您应该使用的替代方案。

导航

加载 HTML

v7.16

要将字符串中的 HTML 加载到网页中的某个 Frame 中,可以使用以下 Frame 方法:

  • loadHtml(String html)
  • loadHtml(LoadHtmlParams params)
  • loadData(LoadDataParams params)

v7.17

出于安全原因,最近的 Chromium 构建中更改了允许将 HTML 加载到网页 Frame 中的功能,并且不再正常工作。例如,如果加载的 HTML 包含位于 Web 服务器上的外部图像,则这些图像将无法加载和显示。

为了摆脱意外行为和潜在的 bug,我们决定移除这些方法,并建议以下替代方法来从字符串加载 HTML。

通过加载 Data URL:

String html = "<html><body>Hello</body></html>";
String base64Html = Base64.getEncoder().encodeToString(html.getBytes(UTF_8));
String dataUrl = "data:text/html;charset=utf-8;base64," + base64Html;
browser.navigation().loadUrl(dataUrl);
val html = "<html><body>Hello</body></html>"
val base64Html = Base64.getEncoder().encodeToString(html.toByteArray(UTF_8))
val dataUrl = "data:text/html;charset=utf-8;base64,$base64Html"
browser.navigation().loadUrl(dataUrl)

通过注册自定义方案并拦截所需的 URL 请求:

InterceptUrlRequestCallback interceptCallback = params -> {
    if (params.urlRequest().url().endsWith("?hello")) {
        byte[] bytes = "<html><body>Hello</body></html>".getBytes();
        UrlRequestJob job = params.newUrlRequestJob(
                UrlRequestJob.Options
                .newBuilder(HttpStatus.OK)
                .addHttpHeader(HttpHeader.of("Content-Type", "text/html"))
                .build());
        job.write(bytes);
        job.complete();
        return Response.intercept(job);
    }
    return Response.proceed();
};

EngineOptions options = EngineOptions.newBuilder(renderingMode)
        .addScheme(HTTP, interceptCallback)
        .build();
Engine engine = Engine.newInstance(options);
Browser browser = engine.newBrowser();
browser.navigation().loadUrl("http://load.html/?hello");
val interceptCallback = InterceptUrlRequestCallback { params ->
    if (params.urlRequest().url().endsWith("?hello")) {
        val bytes = "<html><body>Hello</body></html>".toByteArray()
        val job = params.newUrlRequestJob(
            UrlRequestJob.Options
                .newBuilder(HttpStatus.OK)
                .addHttpHeader(HttpHeader.of("Content-Type", "text/html"))
                .build()
        )
        job.write(bytes)
        job.complete()
        Response.intercept(job)
    } else {
        Response.proceed()
    }
}

val options = EngineOptions.newBuilder(renderingMode)
        .addScheme(HTTP, interceptCallback)
        .build()
val engine = Engine.newInstance(options)
val browser = engine.newBrowser()
browser.navigation().loadUrl("http://load.html/?hello"))

了解更多关于这些方法的信息,请查阅导航

系统属性

以下内部系统属性已被移除:

  • jxbrowser.display.watcher.off
  • jxbrowser.enable.custom.dropdowns

请使用 jxbrowser.desktop.headless.on 系统属性来代替,以在离屏渲染模式下禁用显示监视器并启用自定义下拉菜单。

Go top