Required Browser Features

Rob Wu edited this page Aug 30, 2014 · 40 revisions

This page describes the features that are required for a web browser to have PDF.js function properly. Some of the features are critical and do not let PDF.js function properly if they are not supported or disabled. Some of them can be emulated if absent (e.g. in the compatibility.js file), however the performance and memory usage of PDF.js will be worse than when the feature is present.

The required feature tests can be run at http://mozilla.github.com/pdf.js/features/

CANVAS element is present

Support of the CANVAS element and 2D context is required feature for PDF.js. No emulation of the CANVAS element is provided for the browsers that do not support it.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) Yes (v.6) Yes (v.9) ? Yes (v.5)

CANVAS ImageData has set function

PDF.js will set the canvas backing ImageData object contents. If the set function does not exist, it will be emulated.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Emulated / Yes (v.21) Yes (v.4) Emulated / Yes (v.11) ? Yes (v.5)

get-literal properties

The core library defines object properties using object 'get' literal:

var obj = {
  get prop() { return 1; }
};

The browsers that don't understand this syntax will not be able to execute the code.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) Yes (v.6) Yes (v.9) ? Yes (v.5)

addEventListener is present

The addEventListener method is used to bind event listeners for DOM elements. No emulation of the addEventListener method is provided in the browsers that do not support it.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) Yes (v.6) Yes (v.9) ? Yes (v.5)

Typed arrays are present

The Uint8Array, Uint16Array, Int32Array, Uint32Array, Float32Array and Float64Array will be replaced by the artificial TypedArray object if those types are not implemented natively.

Only subarray, buffer, set and byteLength are similated. The subarray just clones the array. The set method is provided to emulate the Uint8Array's set method. The emulated typed arrays are slower, don't truncate the items to specific data types and are memory inefficient.

If the Float32Array native implementation exists and the Float64Array is absent, then the Float32Array will be used instead of Float64Array.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) Yes (v.6) Yes (v.10) ? Yes (v.5.1)

Object.create() is present

The Object.create method will be added to the Object function if the native implementation is absent.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) Yes (v.6) Yes (v.9) ? Yes (v.5)

Object.defineProperty() is present

The Object.defineProperty method will be added to the Object function if the native implementation is absent. The __defineGetter__ / __defineSetter__ will be used instead.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) Yes (v.6) Yes (v.9) ? Yes (v.5.1)

Object.defineProperty() can be used with DOM objects

Some browsers do not allow using the Object.defineProperty with DOM objects. In this case, the Object.defineProperty is replaced by the artificial one. See Object.defineProperty() is present.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) Yes (v.6) Yes (v.9) ? Yes (v.5.1)

Defined via get-literal properties can be redefined

Some browsers does not allow redefine properties defined with get literal by the Object.defineProperty. In this case, the Object.defineProperty is replaced by the artificial one. See Object.defineProperty() is present.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) Yes (v.6) Yes (v.9) ? Yes (v.5)

Object.keys() is present

The Object.keys method will be added to the Object function if the native implementation is absent.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) Yes (v.6) Yes (v.9) ? Yes (v.5)

FileReader is present

The FileReader allows PDF.js read the file data provided in the input[type=file] HTML element. The live PDF.js demo will not be able to read a local file, if the FileReader object is not supported.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) Yes (v.6) Yes (v.10) ? Yes (v.6.0)

FileReader.prototype.readAsArrayBuffer() is present

Older browsers that have no readAsArrayBuffer method implementation: the readAsBinaryString will be used to emulate its functionality.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) Yes (v.7) Yes (v.10) ? Yes (v.6.0)

XMLHttpRequest.prototype.overrideMimeType() is present

The empty overrideMimeType method will be added to the XMLHttpRequest.prototype, if the browser does not support it.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) Yes (v.6) Emulated (v.10) ? Yes (v.5)

XMLHttpRequest.prototype.response is present

The response getter will be added to the XMLHttpRequest.prototype, if the browser does not support it. This is important for retrieving the binary PDF data using XHR.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
No Yes (v.6) Yes (v.10) ? No

btoa() is present

The btoa will be added to the window object, if the browser does not support it.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) Yes (v.6) Yes (v.10) ? Yes (v.5)

Function.prototype.bind is present

The bind method will be added to the Function.prototype, if the browser does not support it.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) Yes (v.6) Yes (v.9) ? Yes (v.5)

dataset is present for HTML element

The dataset property will be added to the HTMLElement.prototype, if the browser does not support it. This is important for specifying addition information (e.g. for text selection layer) attached to specific HTML DOM element.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) Yes (v.6) Emulated (v.10)
Yes (v.11)
? Yes (v.5.1)

classList is present for HTML element

The classList property will be added to the HTMLElement.prototype, if the browser does not support it. This is important to simplify the viewer implementation.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) Yes (v.6) Yes (v.10) ? Yes (v.5.1)

console object is present

The console object will be added to the window object with empty log and error methods, if the browser does not support it. This is important for the output of error messages and diagnostic information.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) Yes (v.6) Yes (v.9) ? Yes (v.5)

console.log is a bind-able function

The console.log and console.error functions will be replaced, if the browser does not allow using the bind method with these functions.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) Yes (v.6) Yes (v.10) ? Yes (v.5)

Function.prototype.apply accepts typed array

The core code relies on the Function.prototype.apply method to accept the typed array as the second argument. No emulation is provided in browsers that do not support it.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) ? ? ? ?

navigator.language is present

The language getter will be added to the window.navigator object, if the browser does not support it.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) Yes (v.6) Emulated (v.10)
Yes (v.11)
? Yes (v.5)

evenodd fill rule is supported

Some PDF content is using "even-odd" fill rule/method. The content will not be displayed properly (example: #2351) if this feature is not supported.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
No (v.25) Yes (v.7) No (v.10) ? No (v.6.0)

dashed line style is supported

Some PDF content is using custom dash line styles. The content will not be displayed properly if this feature is not supported.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) Yes (v.7) No (v.10) ? No (v.6.0)

@font-face is supported/enabled

Most of PDF documents use embedded fonts. If the browser does not support @font-face style rule, the document will not be displayed property.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) Yes (v.6) Yes (v.9) ? Yes (v.5)

@font-face loading completion detection

The PDF.js shall wait some time before using fonts with CANVAS, if the browser cannot tell if fonts are loaded and can be used.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Emulated (v.25) Yes (v.14) Yes (v.9) ? Yes (v.6)

Worker is supported/enabled

The PDF.js will execute all code (even long running) on the main thread, if the browser does not support web workers.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) Yes (v.6) Yes (v.10) ? Yes (v.5)

Worker can receive/send typed arrays

The PDF.js will execute all code on the main thread, if the browser cannot send (large) typed arrays to web workers.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) Yes (v.6) Yes (v.10) ? Yes (v.6.0)

Worker can use transfers for postMessage

Checks if the browser can transfer large chunks of data to the main thread vs cloning typed arrays. See Using web workers

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.17) Yes (v.18~27) No (v.11) ? ?

XMLHttpRequest supports the response property in web workers

The PDF.js will execute all code on the main thread, if the browser cannot request network binary data from web workers.

Chrome Firefox (Gecko) Internet Explorer Opera Safari
Yes (v.24) Yes (v.10) Yes (v.10) ? Yes (v.5.1)