彩票走势图

Java浏览器集成控件JxBrowser v7.13新版发布!可运行Chromium 88

原创|产品更新|编辑:李显亮|2021-03-02 09:59:24.797|阅读 860 次

概述:JAVA应用程序浏览器集成控件JxBrowser更新至7.13, 在此版本中,Chromium引擎已升级到版本88,支持macOS Big Sur,引入了期待已久的打印API,欢迎下载体验。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

JxBrowser是将基于Chromium的浏览器与Java应用程序集成,以处理和显示HTML5、CSS3、JavaScript、Flash等。

近日,JxBrowser v7.13发布啦! 在此版本中,Chromium引擎已升级到版本88,支持macOS Big Sur,引入了期待已久的打印API,允许以编程方式打印网页和PDF,欢迎下载体验。

点击下载最新版JxBrowser

新增功能

Chromium 88

Chromium已更新至版本88.0.4324.182。在此Chromium构建中,其与JxBrowser封装在一起的某些功能已被删除或更改,因此jxbrowser的库版本在公共API中引入了一些重大更改。

macOS Big Sur

现在可以在基于英特尔的Mac上的macOS Big Sur上运行JxBrowser了。同时计划在下一个版本中引入对 Apple Silicon M1 架构的支持。现在可以在 Rosetta 2 仿真模式下使用 JxBrowser。

打印API

现在,可以以编程方式打印网页或PDF文档,而无需显示“打印预览”对话框。使用新的打印API,可以:

  • 选择打印机设备;
  • 提供所需的打印设置,例如纸张尺寸,方向,页面范围等;
  • 打印完成时获得通知;
  • 取消打印;
  • 将当前加载的网页保存为PDF文档等。

下面的示例演示如何将当前加载的网页另存为PDF:

Browser browser = engine.newBrowser();
CountDownLatch latch = new CountDownLatch(1);

// Allow printing web pages programmatically
browser.set(PrintCallback.class, (params, tell) -> tell.print());
// When a web page is about to print, configure the print settings and proceed
browser.set(PrintHtmlCallback.class, (params, tell) -> {
    // Select PDF printer as the target device
    PdfPrinter<HtmlSettings> pdfPrinter = params.printers().pdfPrinter();
    // Access the print job to configure its settings and register events
    PrintJob<HtmlSettings> printJob = pdfPrinter.printJob();
    // Listen to the print completed event
    printJob.on(PrintCompleted.class, event -> latch.countDown());
    // Configure the required print settings including path to the target PDF file
    printJob.settings()
            .pdfFilePath(Paths.get("/Users/vladimir/Desktop/google.pdf"))
            .apply();
    // Notify the engine that we want to print using the given PDF printer
    tell.proceed(pdfPrinter);
});

// Load web page and wait until it's loaded completely
browser.navigation().loadUrlAndWait("//google.com");
// Print the currently loaded web page
browser.mainFrame().ifPresent(Frame::print);
// Await until printing has been completed
if (latch.await(30, TimeUnit.SECONDS)) {
    throw new IllegalStateException("Failed to save web page as PDF within 30 sec");
}

定制方案

拦截请求的方式得到了改进。要使用自定义jxb方案拦截URL请求,请添加相应的方案,并将其与拦截回调相关联,如下例所示:

EngineOptions.Builder optionsBuilder = EngineOptions.newBuilder(OFF_SCREEN);
optionsBuilder.addScheme(Scheme.of("jxb"), params -> {
    UrlRequestJob job = params.newUrlRequestJob(
            UrlRequestJob.Options.newBuilder(HttpStatus.OK)
                                 .addHttpHeader(HttpHeader.of("Content-Type", "text/html"))
                                 .build());
    job.write("<html><body>Hello!</body></html>".getBytes(UTF_8));
    job.complete();
    return Response.intercept(job);
});
Engine engine = Engine.newInstance(optionsBuilder.build());

现在,如果加载jxb://anyhost/anypage.html,则将拦截URL请求,并调用关联的回调。将获得以下输出:

Java浏览器集成控件JxBrowser v7.13新版发布!可运行Chromium 88

外部应用

操作系统中安装的某些应用程序可能与特定的URI方案相关联。当用户使用与已安装的应用程序关联的方案导航到URL时,Chromium将显示一个对话框,用户可以在其中确定是否应在关联的外部应用程序中打开链接。

在此更新中,引入了回调,可以使用该回调来拦截此类情况并向最终用户显示您自己的对话框,或者以编程方式打开外部应用程序而不会提示用户。例如:

browser.set(OpenExternalAppCallback.class, (params, tell) -> tell.open());

创建Swing,JavaFX和SWTBrowserView实例时,此回调将自动注册(如果尚未注册),并显示相应的对话框:

Java浏览器集成控件JxBrowser v7.13新版发布!可运行Chromium 88

改进

  • 允许将大小调整Browser为1x1。在以前的版本中,最小大小是由操作系统定义的。
  • 启用多个文件下载。现在,当下载多个文件时,StartDownloadCallback将为每个文件调用回调。
  • 处理某些系统调用EINTR在macOS和Linux上被信号中断的情况。
  • 允许通过--hung-render-delay-seconds=45Chromium开关配置渲染过程无响应超时。
  • 允许输入空的用户名和密码AuthenticateCallback。

Bug修复

  • 在(SWT:12502): GLib-GObject-CRITICAL **: 14:58:41.997: g_object_set_data: assertion 'G_IS_OBJECT (object)' failedSWT中显示上下文菜单时误差BrowserView在硬件加速上的Linux渲染模式。
  • 当在硬件加速渲染模式下接收键盘事件时,numpad的键码不正确。
  • 在离屏渲染模式下关闭Swing BrowserView弹出窗口时出现IllegalStateException错误。
  • 当组件被嵌入到一个绝对布局的Swing容器中,并且它们在离屏渲染模式下发生了程序性变化时,BrowserView的边界没有被更新。
  • 当加载src="data:image/gif;base64,R0lGODlhE.... "的IFRAME时,主Chromium程序崩溃。
  • 当显示多个 "选择客户端SSL证书 "对话框,且用户在其中一个对话框中选择了自定义SSL证书时,在Chromium主进程中发生崩溃。
  • Angular应用在离屏渲染模式下,不能 "看到 "一些键盘事件。
  • Frame.children()方法在必须只返回直系子代时,会返回所有嵌套子代。
  • StartDownloadCallback.Action.cancel()动作没有取消下载。

慧都是TeamDev官方友好合作伙伴,如果您对jxbrowser感兴趣,可以了解具体授权价格和使用机制。

标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP