Skip to content

Commit 4e8e98f

Browse files
authored
Merge pull request aframevr#3983 from dmarcos/ie11
Add polyfills to support 2D Mode in IE11 (fix aframevr#3903)
2 parents 710e29a + eaf24c2 commit 4e8e98f

6 files changed

Lines changed: 33 additions & 0 deletions

File tree

docs/introduction/vr-headsets-and-webvr-browsers.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,3 +156,4 @@ specifically those that support WebGL including:
156156
- Chrome
157157
- Safari
158158
- Edge
159+
- Internet Explorer 11

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
"dependencies": {
4141
"animejs": "^2.2.0",
4242
"browserify-css": "^0.8.4",
43+
"custom-event-polyfill": "^1.0.6",
4344
"debug": "ngokevin/debug#noTimestamp",
4445
"deep-assign": "^2.0.0",
4546
"document-register-element": "dmarcos/document-register-element#8ccc532b7f3744be954574caf3072a5fd260ca90",

src/index.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,13 @@ if (!window.hasNativeWebXRImplementation && !window.hasNativeWebVRImplementation
2525
var utils = require('./utils/');
2626
var debug = utils.debug;
2727

28+
if (utils.isIE11) {
29+
// Polyfill `CustomEvent`.
30+
require('custom-event-polyfill');
31+
// Polyfill String.startsWith.
32+
require('../vendor/starts-with-polyfill');
33+
}
34+
2835
var error = debug('A-Frame:error');
2936
var warn = debug('A-Frame:warn');
3037

src/utils/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ module.exports.debug = debug;
1515
module.exports.device = device;
1616
module.exports.entity = require('./entity');
1717
module.exports.forceCanvasResizeSafariMobile = require('./forceCanvasResizeSafariMobile');
18+
module.exports.isIE11 = require('./is-ie11');
1819
module.exports.material = require('./material');
1920
module.exports.objectPool = objectPool;
2021
module.exports.split = require('./split').split;

src/utils/is-ie11.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// https://stackoverflow.com/a/17907562
2+
function getInternetExplorerVersion () {
3+
var version = -1;
4+
var userAgent = navigator.userAgent;
5+
var re;
6+
if (navigator.appName === 'Microsoft Internet Explorer') {
7+
re = new RegExp('MSIE ([0-9]{1,}[\\.0-9]{0,})');
8+
if (re.exec(userAgent) != null) { version = parseFloat(RegExp.$1); }
9+
} else if (navigator.appName === 'Netscape') {
10+
re = new RegExp('Trident/.*rv:([0-9]{1,}[\\.0-9]{0,})');
11+
if (re.exec(userAgent) != null) { version = parseFloat(RegExp.$1); }
12+
}
13+
return version;
14+
}
15+
16+
module.exports = getInternetExplorerVersion() === 11;

vendor/starts-with-polyfill.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// https://stackoverflow.com/a/36213464
2+
if (!String.prototype.startsWith) {
3+
String.prototype.startsWith = function(searchString, position){
4+
position = position || 0;
5+
return this.substr(position, searchString.length) === searchString;
6+
};
7+
}

0 commit comments

Comments
 (0)