From 7b5dd5c310f7ec4d7f6e329367d34258cce10e8e Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Sun, 28 Jun 2020 12:40:02 -0400 Subject: [PATCH] Update browser compatibility and Edge detection (#629) --- .eslintrc.json | 11 ++++++++--- ext/bg/css/settings.css | 2 ++ ext/mixed/js/core.js | 32 -------------------------------- ext/mixed/js/environment.js | 11 +++++++++-- ext/mixed/js/yomichan.js | 19 +++++++++++++++++++ 5 files changed, 38 insertions(+), 37 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index b7ed0164..018e23b4 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -82,6 +82,12 @@ "no-unsanitized/property": "error" }, "overrides": [ + { + "files": ["ext/mixed/js/core.js"], + "env": { + "webextensions": false + } + }, { "files": ["ext/**/*.js"], "excludedFiles": ["ext/mixed/js/core.js"], @@ -101,8 +107,7 @@ "deferPromise": "readonly", "clone": "readonly", "EventDispatcher": "readonly", - "EventListenerCollection": "readonly", - "EXTENSION_IS_BROWSER_EDGE": "readonly" + "EventListenerCollection": "readonly" } }, { @@ -116,7 +121,7 @@ } }, { - "files": ["ext/mixed/js/core.js"], + "files": ["ext/mixed/js/yomichan.js"], "globals": { "chrome": "writable" } diff --git a/ext/bg/css/settings.css b/ext/bg/css/settings.css index 7659f6f2..1b945310 100644 --- a/ext/bg/css/settings.css +++ b/ext/bg/css/settings.css @@ -208,6 +208,7 @@ input[type=checkbox].storage-button-checkbox { } html:root[data-browser=edge] [data-show-for-browser~=edge], +html:root[data-browser=edge-legacy] [data-show-for-browser~=edge-legacy], html:root[data-browser=chrome] [data-show-for-browser~=chrome], html:root[data-browser=firefox] [data-show-for-browser~=firefox], html:root[data-browser=firefox-mobile] [data-show-for-browser~=firefox-mobile], @@ -221,6 +222,7 @@ html:root[data-operating-system=openbsd] [data-show-for-operating-system~=openbs } html:root[data-browser=edge] [data-hide-for-browser~=edge], +html:root[data-browser=edge-legacy] [data-hide-for-browser~=edge-legacy], html:root[data-browser=chrome] [data-hide-for-browser~=chrome], html:root[data-browser=firefox] [data-hide-for-browser~=firefox], html:root[data-browser=firefox-mobile] [data-hide-for-browser~=firefox-mobile], diff --git a/ext/mixed/js/core.js b/ext/mixed/js/core.js index 9b3ea3e2..e22be33d 100644 --- a/ext/mixed/js/core.js +++ b/ext/mixed/js/core.js @@ -15,38 +15,6 @@ * along with this program. If not, see . */ - -/* - * Extension information - */ - -function _extensionHasChrome() { - try { - return typeof chrome === 'object' && chrome !== null; - } catch (e) { - return false; - } -} - -function _extensionHasBrowser() { - try { - return typeof browser === 'object' && browser !== null; - } catch (e) { - return false; - } -} - -const EXTENSION_IS_BROWSER_EDGE = ( - _extensionHasBrowser() && - (!_extensionHasChrome() || (typeof chrome.runtime === 'undefined' && typeof browser.runtime !== 'undefined')) -); - -if (EXTENSION_IS_BROWSER_EDGE) { - // Edge does not have chrome defined. - chrome = browser; -} - - /* * Error handling */ diff --git a/ext/mixed/js/environment.js b/ext/mixed/js/environment.js index 5bd84010..1f4038d2 100644 --- a/ext/mixed/js/environment.js +++ b/ext/mixed/js/environment.js @@ -67,8 +67,15 @@ class Environment { } async _getBrowser() { - if (EXTENSION_IS_BROWSER_EDGE) { - return 'edge'; + try { + if (chrome.runtime.getURL('/').startsWith('ms-browser-extension://')) { + return 'edge-legacy'; + } + if (/\bEdge?\//.test(navigator.userAgent)) { + return 'edge'; + } + } catch (e) { + // NOP } if (typeof browser !== 'undefined') { try { diff --git a/ext/mixed/js/yomichan.js b/ext/mixed/js/yomichan.js index 5fa504ef..ab1afcd9 100644 --- a/ext/mixed/js/yomichan.js +++ b/ext/mixed/js/yomichan.js @@ -15,6 +15,25 @@ * along with this program. If not, see . */ +// Set up chrome alias if it's not available (Edge Legacy) +if ((() => { + let hasChrome = false; + let hasBrowser = false; + try { + hasChrome = (typeof chrome === 'object' && chrome !== null && typeof chrome.runtime !== 'undefined'); + } catch (e) { + // NOP + } + try { + hasBrowser = (typeof browser === 'object' && browser !== null && typeof browser.runtime !== 'undefined'); + } catch (e) { + // NOP + } + return (hasBrowser && !hasChrome); +})()) { + chrome = browser; +} + const yomichan = (() => { class Yomichan extends EventDispatcher { constructor() {