Posted on November 26, 2019
JxBrowser 7.4 comes with a number of great possibilities: now you can embed video and audio content from Netflix, Amazon Prime, Spotify, and other platforms that use DRM decryption. And to add to it: you can embed JxBrowser into applications intended for ARM devices.
JxBrowser 7.4 supports the ARM architecture on Linux 64-bit. It has been tested in the following environments:
- Raspberry Pi 2 (A 900MHz quad-core ARM Cortex-A7 CPU) and AWS (AWS Graviton Processors);
- Ubuntu 16.04 LTS and 18.04 LTS 64-bit;
- JDK 8 64-bit (no GUI provided by JRE), OpenJDK 11 (Swing + JavaFX).
H.264, MP4, AAC
We are glad to announce, that starting with this release you do not need to request a separate
*c build with the enabled proprietary codecs to play the H.264, MP4, and AAC formats. You can enable the proprietary codecs, which are disabled by default, through the API as shown below:
Engine engine = Engine.newInstance( EngineOptions.newBuilder(renderingMode) .enableProprietaryFeature(ProprietaryFeature.AAC) .enableProprietaryFeature(ProprietaryFeature.H_264) .build());
The H.264 and AAC codecs are the proprietary components. By enabling these codecs you state that you are aware that H.264 and AAC are the proprietary components and you should have a license in order to use them. For more information, you could contact patent holders: Via Licensing and MPEG LA. TeamDev shall not be responsible for your use of the H.264 and AAC codecs.
Now you can enable the proprietary component called Widevine, which allows playing the video/audio content on Netflix, Amazon Prime, Spotify, and content on other web services that use Widevine to distribute content.
The Widevine component is disabled by default. Use the following code to enable it:
Engine engine = Engine.newInstance( EngineOptions.newBuilder(renderingMode) .enableProprietaryFeature(ProprietaryFeature.WIDEVINE) .build());
Windows Server 2019
Now the library officially supports Windows Server 2019.
By default drag and drop is enabled for both Swing and JavaFX
BrowserView. To disable drag and drop use the following new API:
The DOM API has been extended with the new functionality that allows getting the list of the attribute nodes of the element. For example:
element.attributeNodes().forEach(attribute -> System.out.println("name = " + attribute.nodeName()));
Navigationclass has been extended with the
browser()method that allows getting the
Browserinstance associated with the
- Now the spell checker dictionaries are downloaded into the user data directory instead of the directory with the Chromium binaries on Windows. We did it because very often the directory, where the Chromium binaries are located, has read-only access and the engine is not allowed to create new files there. In such case, the spell checker dictionaries are not loaded and initialized successfully, so the spell checking might not be working as expected. Not a case anymore with this update.
- The drag cursor is now updated when you drag something to an external application in the off-screen rendering mode.
- Add the
NetError. BLOCKED_BY_RESPONSEerror which occurs when frame embedding is forbidden by a web server. The missing error code lead to the issue when the
FrameLoadFailedevent was not fired for some web pages.
- Support of the
Document.visibilityStateproperty has been added. Now if you remove
BrowserViewfrom its container or minimize the window where
BrowserViewis embedded, this property will change its value.
- The JxBrowser binaries for macOS are signed and notarized to meet the macOS Catalina requirements.
- The library creates the symlinks to the system libraries on Linux only if they are missing. Sometimes the system libraries might be updated or removed due to the system updates. In this case, the next launch will fail because of the broken symlinks. Now the library checks and creates the symlinks every time on startup.
- JxBrowser now allows throwing exceptions from the methods marked with the
@JsAccessibleannotation. You can throw an exception or
- The “Print using system dialogue…” action has been restored in the Print Preview dialog to allow you to print the web page using the system print dialog.
- JxBrowser now allows dropping the files (e.g. images) into
BrowserViewwith the appropriate reaction (e.g. loading and displaying the dropped file).
- The memory leak when adding and removing the
BrowserViewcomponent into a Swing or JavaFX container.
- The unexpected Chromium process termination after ~2 hours of inactivity on Linux. The root cause came from the Chromium updater functionality that is trying to clone the main Chromium process after ~2 hours of inactivity. Since the library doesn’t support automatic updates, we disabled this functionality in Chromium to resolve this issue.
java.lang.UnsatisfiedLinkErrorexception on Linux with Java 13. It was caused bu the missing dependency.
- The Chromium startup failure on macOS configured to Spanish language due to the missing language pack.
java.lang.NullPointerExceptionexception when dragging the files from the filesystem into the Swing
BrowserViewcomponent on macOS with Java 11 and higher.
- The invalid cookie expiration time being returned for a session cookie that does not have an expiration time. Now if the cookie does not have an expiration time, it returns
- The text finder iterating backward by default.
- The search match case not working inside PDF.
- The web content being displayed at the top left corner of the main screen when a Swing
BrowserViewcomponent is embedded into the
- The native crash in the Chromium engine when moving
BrowserViewbetween multiple displays in the off-screen rendering mode.
- The issue when the JavaFX
BrowserViewin the hardware accelerated rendering mode begins to detach the native window and encounters the
IllegalStateExceptiondue to missing main Chromium process.
- Some keyboard listeners generated via Angular not processing keyboard events in the off-screen rendering mode.
CertificateErrorCallback functionality that allows ignoring the SSL certificate errors has been marked as
@deprecated and will be removed in one of the next versions. Please use the
VerifyCertificateCallback callback instead where you can tell the engine that the invalid SSL certificate is valid and the engine should continue loading the resource.