Add compatibility table for all required Browser Features. Not fan of the bunch or html code but mdown don't support table in other way ;)
parent
1e49a109a3
commit
3753bbe7f4
@ -9,6 +9,26 @@ The required features tests can be run at http://mozilla.github.com/pdf.js/featu
|
||||
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.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="get-literal"></a>get-literal properties
|
||||
|
||||
@ -22,12 +42,52 @@ var obj = {
|
||||
|
||||
The browsers that don't understand this syntax will not be able to execute the code.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="addEventListener"></a>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.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="Uint8Array"></a><a id="Uint16Array"></a><a id="Int32Array"></a><a id="Float32Array"></a><a id="Float64Array"></a>Typed arrays are present
|
||||
|
||||
@ -37,64 +97,305 @@ Only `subarray`, `buffer`, `set` and `byteLength` are similated. The `subarray`
|
||||
|
||||
If the `Float32Array` native implementation exists and the `Float64Array` is absent, then the `Float32Array` will be used instead of `Float64Array`.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="Object-create"></a>Object.create() is present
|
||||
|
||||
The `Object.create` method will be added to the `Object` function if the native implementation is absent.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="Object-defineProperty"></a>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.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="Object-defineProperty-DOM"></a>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` be replaced by the artificial one. See [Object.defineProperty() is present](#Object-defineProperty).
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="get-literal-redefine"></a>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` be replaced by the artificial one. See [Object.defineProperty() is present](#Object-defineProperty).
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="Object-keys"></a>Object.keys() is present
|
||||
|
||||
The `Object.keys` method will be added to the `Object` function if the native implementation is absent.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="FileReader"></a>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 local file, if the `FileReader` object is not supported.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="FileReader-readAsArrayBuffer"></a>FileReader.prototype.readAsArrayBuffer() is present
|
||||
|
||||
Older browsers has no `readAsArrayBuffer` method implementation: the `readAsBinaryString` will be used to emulate its functionality.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="XMLHttpRequest-overrideMimeType"></a>XMLHttpRequest.prototype.overrideMimeType() is present
|
||||
|
||||
The empty `overrideMimeType` method will be added to the `XMLHttpRequest.prototype`, if the browser does not support it.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="XMLHttpRequest-response"></a>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.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="bota"></a>btoa() is present
|
||||
|
||||
The `btoa` will be added to the window object, if the browser does not support it.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="Function-bind"></a>Function.prototype.bind is present
|
||||
|
||||
The `bind` method will be added to the `Function.prototype`, if the browser does not support it.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="dataset"></a>dataset is present for HTML element
|
||||
|
||||
@ -102,68 +403,334 @@ The `dataset` property will be added to the `HTMLElement.prototype`, if the brow
|
||||
This is important for specifying addition information (e.g. for text selection layer)
|
||||
attached to specific HTML DOM element.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="classList"></a>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.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="console"></a>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 output of the error message and diagnostic information.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="console-log-bind"></a>console.log is a bind-able function
|
||||
|
||||
The `console.log` and `console.error` functions will be replaced, if the browser does not allow to use
|
||||
the bind method with these functions.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="apply-typed-array"></a>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.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="navigator-language"></a>navigator.language is present
|
||||
|
||||
The language getter will be added to the window.navigator object, if the browser does not support it.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="fillRule-evenodd"></a>evenodd fill rule is supported
|
||||
|
||||
Some PDF content is using "even-odd" fill rule/method. The content will not be displayed
|
||||
properly (example: [#2351](https://github.com/mozilla/pdf.js/issues/2351)) if this feature is not supported.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="dash-array"></a>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.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="font-face"></a>@font-face is supported/enabled
|
||||
|
||||
Most of PDF documents are using embedded fonts. If the browser does not support `@font-face`
|
||||
style rule, the document will not be displayed property.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="font-face-sync"></a>@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.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="Worker"></a>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.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="Worker-Uint8Array"></a>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.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## <a id="Worker-xhr-response"></a>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.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chrome</th>
|
||||
<th>Firefox (Gecko)</th>
|
||||
<th>Internet Explorer</th>
|
||||
<th>Opera</th>
|
||||
<th>Safari</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
<td>?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
Loading…
x
Reference in New Issue
Block a user