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.
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>