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 ;)

clawfire 2013-02-12 02:41:17 -08:00
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. 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. 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 ## <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. 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 ## <a id="addEventListener"></a>addEventListener is present
The `addEventListener` method is used to bind event listeners for DOM elements. 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. 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 ## <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`. 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 ## <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. 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 ## <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. 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 ## <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. 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). 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 ## <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`. 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). 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 ## <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. 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 ## <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. 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 ## <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. 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 ## <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. 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 ## <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. 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. 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 ## <a id="bota"></a>btoa() is present
The `btoa` will be added to the window object, if the browser does not support it. 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 ## <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. 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 ## <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) This is important for specifying addition information (e.g. for text selection layer)
attached to specific HTML DOM element. 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 ## <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. 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. 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 ## <a id="console"></a>console object is present
The `console` object will be added to the window object with empty `log` and `error` methods, 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. 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 ## <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 `console.log` and `console.error` functions will be replaced, if the browser does not allow to use
the bind method with these functions. 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 ## <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. 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. 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 ## <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. 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 ## <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 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. 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 ## <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 Some PDF content is using custom dash line styles. The content will not be displayed
properly if this feature is not supported. 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 ## <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` 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. 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 ## <a id="font-face-sync"></a>@font-face loading completion detection
The PDF.js shall wait some time before using fonts with CANVAS, 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. 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 ## <a id="Worker"></a>Worker is supported/enabled
The PDF.js will execute all code (even long running) on the main thread, The PDF.js will execute all code (even long running) on the main thread,
if the browser does not support web workers. 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 ## <a id="Worker-Uint8Array"></a>Worker can receive/send typed arrays
The PDF.js will execute all code on the main thread, The PDF.js will execute all code on the main thread,
if the browser cannot send (large) typed arrays to web workers. 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 ## <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, The PDF.js will execute all code on the main thread,
if the browser cannot request network binary data from web workers. 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>