-
Notifications
You must be signed in to change notification settings - Fork 0
Required Browser Features
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/
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) |
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) |
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) |
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) |
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) |
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) |
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) |
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) |
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) |
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) |
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) |
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) |
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) |
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 |
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) |
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) |
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) |
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) |
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) |
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) |
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) | ? | ? | ? | ? |
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) |
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) |
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) |
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) |
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) |
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) |
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) |
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) | ? | ? |
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) |