diff options
author | Artur Signell <artur@vaadin.com> | 2013-09-24 11:36:18 +0300 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2013-09-25 09:59:50 +0000 |
commit | 0248b8f7ba0817cc1dbf8bae431544803602cb08 (patch) | |
tree | 076e935d9ca6c20ad18ebabbbe7b8d703d9eeb7b /shared | |
parent | 37b85436cafede61f4b4f1e0b50e00c4c2295b4c (diff) | |
download | vaadin-framework-0248b8f7ba0817cc1dbf8bae431544803602cb08.tar.gz vaadin-framework-0248b8f7ba0817cc1dbf8bae431544803602cb08.zip |
Fixes browser detection for IE11 (#12638)
Change-Id: I1f71477368ce42eac3679f7f2f9e87fe8e02e4de
Diffstat (limited to 'shared')
-rw-r--r-- | shared/src/com/vaadin/shared/VBrowserDetails.java | 38 |
1 files changed, 32 insertions, 6 deletions
diff --git a/shared/src/com/vaadin/shared/VBrowserDetails.java b/shared/src/com/vaadin/shared/VBrowserDetails.java index f31f5f3c04..a745a212b0 100644 --- a/shared/src/com/vaadin/shared/VBrowserDetails.java +++ b/shared/src/com/vaadin/shared/VBrowserDetails.java @@ -31,6 +31,7 @@ public class VBrowserDetails implements Serializable { private boolean isGecko = false; private boolean isWebKit = false; private boolean isPresto = false; + private boolean isTrident = false; private boolean isChromeFrameCapable = false; private boolean isChromeFrame = false; @@ -65,9 +66,11 @@ public class VBrowserDetails implements Serializable { // browser engine name isGecko = userAgent.indexOf("gecko") != -1 - && userAgent.indexOf("webkit") == -1; + && userAgent.indexOf("webkit") == -1 + && userAgent.indexOf("trident/") == -1; isWebKit = userAgent.indexOf("applewebkit") != -1; isPresto = userAgent.indexOf(" presto/") != -1; + isTrident = userAgent.indexOf("trident/") != -1; // browser name isChrome = userAgent.indexOf(" chrome/") != -1; @@ -75,6 +78,9 @@ public class VBrowserDetails implements Serializable { isOpera = userAgent.indexOf("opera") != -1; isIE = userAgent.indexOf("msie") != -1 && !isOpera && (userAgent.indexOf("webtv") == -1); + // IE 11 no longer contains MSIE in the user agent + isIE = isIE || isTrident; + isFirefox = userAgent.indexOf(" firefox/") != -1; // chromeframe @@ -113,11 +119,21 @@ public class VBrowserDetails implements Serializable { // Browser version try { if (isIE) { - String ieVersionString = userAgent.substring(userAgent - .indexOf("msie ") + 5); - ieVersionString = safeSubstring(ieVersionString, 0, - ieVersionString.indexOf(";")); - parseVersionString(ieVersionString); + if (userAgent.indexOf("msie") == -1) { + // IE 11+ + int rvPos = userAgent.indexOf("rv:"); + if (rvPos >= 0) { + String tmp = userAgent.substring(rvPos + 3); + tmp = tmp.replaceFirst("(\\.[0-9]+).+", "$1"); + parseVersionString(tmp); + } + } else { + String ieVersionString = userAgent.substring(userAgent + .indexOf("msie ") + 5); + ieVersionString = safeSubstring(ieVersionString, 0, + ieVersionString.indexOf(";")); + parseVersionString(ieVersionString); + } } else if (isFirefox) { int i = userAgent.indexOf(" firefox/") + 9; parseVersionString(safeSubstring(userAgent, i, i + 5)); @@ -288,6 +304,16 @@ public class VBrowserDetails implements Serializable { } /** + * Tests if the browser is using the Trident engine + * + * @since 7.1.7 + * @return true if it is Trident, false otherwise + */ + public boolean isTrident() { + return isTrident; + } + + /** * Tests if the browser is Safari. * * @return true if it is Safari, false otherwise |