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() {