Opera 38 is now available for cross-browser testing. Opera version 38 for Linux, Windows and Mac OSX was just released today by Opera Software. This version is based on Google Chrome/Blink 51 rendering engine. You can already cross-browser test your webapps, javascript and designs in Opera 38!

Cross-browser testing in Opera 38

Try Opera 38 in Browserling now!

Key changes in Opera 38

  • Add your own lists to ad blocker.

You can add your own block lists. To add your own custom list file, head to Settings and click the "Custom Block Lists" button in the ad-blocking section.

  • Add your own photo as theme.

You can now click "Create your theme" option in the theme manager. Go to the Customize start page and click the PLUS button, then choose your own photo to create your own personalized theme.

  • Speed Dial improvements.

Websites can't be removed from Speed Dial accidentally. There are now three dots instead of delete button when you move your mouse over a Speed Dial item. When you click it, it gives you a menu of options - delete, edit or open in a private tab.

  • Extension button visible in the Speed Dial side panel.

All extension users will have the extension manager always at hand. The extension icon is visible on side panel on the left side of the Speed Dial page.

  • Support for OSX 10.8 Mountain Lion and earlier has been dropped.

Starting from this version, Opera no longer works on OSX 10.8 and earlier. Now only OS X 10.9 and higher is supported.

  • Battery improvements, stability enhancements and bug fixes.

Battery saver details in Opera 38

  • Automatically pausing unused plug-ins.
  • Including ad blocker - when enabled, it enables even more battery savings.
  • Reducing frame rate to 30 frames per second.
  • Pausing animations of browser themes.
  • Reducing activity in background tabs.
  • Tuning video-playback parameters and forcing usage of hardware accelerated video codecs.
  • Waking CPU less often due to optimal scheduling of JavaScript timers.

Developer updates in Opera 38

ES6 Symbol.hasInstance

Constructors can now implement their own Symbol.hasInstance method, which is used by instanceof to determine whether a constructor object recognizes an object as its instance.

Intersection Observer API

The brand-new Intersection Observer API makes it easy to efficiently track when a given element in the DOM enters the visible viewport or leaves it.

Percentage sizes of flex item children

According to the spec, certain flex items have definite sizes. If a child element of such a flex item uses percentage-based sizes, these are now handled correctly.

CSS border-image now follows the specification

Chrome and Opera now require a border style in order to paint border-images, matching the spec. If you're affected by this change, add e.g. border-style: solid where border-image is used.

Iterable array-like DOM interfaces

Any DOM interfaces containing indexed property getters and length properties now have a Symbol.iterator that makes them iterable. This means that things like NodeList, HTMLAllCollection, FileList, or MediaList can now be looped over by using forEach or for-of.

ES6 subclassing using Symbol.species

The Symbol.species accessor property allows subclasses to override the default constructor for objects.


The key property on KeyboardEvent instances is now implemented. It returns the string value of the key (or keys) pressed by the user to generate the event.

SameSite cookie attribute

The cookie attribute formerly known as "First-Party-Only" or "First-Party" allows servers to mitigate the risk of CSRF and information leakage attacks by asserting that a particular cookie should only be sent with requests initiated from the same domain.

ES6 Array.prototype.values

The values method for arrays returns an iterator over the contents of the array. This is similar to Map.prototype.values for maps or Set.prototype.values for sets.

Service workers: ExtendableMessageEvent

ServiceWorker.prototype.postMessage() now results in an ExtendableMessageEvent fired on ServiceWorkerGlobalScope as a 'message' event. Before this change, postMessage() resulted in a MessageEvent fired on the global scope. Calling the waitUntil(promise) method of an ExtendableMessageEvent instance extends its lifetime until promise is settled.

WebRTC: promise-based RTCPeerConnection methods

The following RTCPeerConnection methods are now promise-based, matching the updated specification: addIceCandidate, createAnswer, createOffer, setLocalDescription, and setRemoteDescription.

ES6 Function.prototype.name

In ES6, the name property is sometimes set even on anonymous functions, based on the syntactic position of the function or class expression.

AES_256_GCM for TLS

To simplify server configuration and negotiate modern ciphers with more existing servers, Chrome and Opera now offer the AES_256_GCM cipher suite for TLS connections.

ES6 iterator closing

Iterators are now checked for a close method which is called if the loop terminates early. This can be used for clean-up duty after the iteration has finished.

ES6 RegExp subclassing

Previous versions of the JavaScript spec always used the original value of RegExp.prototype.exec in other methods such as String.prototype.replace - there was no way to override exec programmatically to change the core matching algorithm.

Passive event listeners

Passive event listeners are a new feature in the DOM spec that enable developers to opt-in to better scroll performance by eliminating the need for scrolling to block on touch and wheel event listeners. Developers can annotate touch and wheel listeners with { passive: true } to indicate that they don't invoke preventDefault to get a massive scroll performance boost.

Presentation API

The Presentation API enables accessing external presentation-type displays and using them for presenting web content.

Web Audio API: OfflineAudioContext.prototype.length

OfflineAudioContext instances now have a length that indicates the number of frames that the offline context will render.

Deprecated and removed developer features in Opera 38

  • The non-standard results attribute for <input type=search> is now deprecated. In Chrome and Opera, it's a purely cosmetic feature that adds a magnifier icon to the input field. In desktop Safari, it controls how many submitted queries are shown in a popup opened by clicking the magnifier icon.
  • Chromium 51/Opera 38 no longer negotiates SPDY over HTTPS connections. Sites using it return to negotiating HTTP/1.1, unless they upgrade to HTTP/2. Use HTTP/2 instead.
  • A related feature removal is that of NPN, which was the TLS extension used to negotiate SPDY. During the standardization process, NPN was replaced with ALPN.
  • For security reasons, custom messages in onbeforeunload dialogs are no longer used.
  • DHE-based TLS ciphers are now deprecated and support for them will be removed at some point in the future. A warning message is logged to the DevTools console whenever such a cipher is used. Servers should upgrade to ECDHE ciphers instead.

Happy cross-browser testing in Opera 38!