summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortoasted-nutbread <toasted-nutbread@users.noreply.github.com>2020-05-24 14:01:21 -0400
committerGitHub <noreply@github.com>2020-05-24 14:01:21 -0400
commit6dd6af05e1ed3e0da4091af073c38e1d8ec0268d (patch)
tree7262add632fac645ca0481abbb63efb3b8291bb8
parent3c4c82dcfc66a1b24a3df3d4b15283235c72cf66 (diff)
Update background global object usage (#556)
* Omit global window object for scripts used on the background page * Validate document exists before using * Remove dom.js from background.html
-rw-r--r--ext/bg/background.html1
-rw-r--r--ext/bg/js/anki-note-builder.js2
-rw-r--r--ext/bg/js/backend.js22
-rw-r--r--ext/bg/js/background-main.js7
-rw-r--r--ext/bg/js/database.js2
-rw-r--r--ext/mixed/js/core.js20
6 files changed, 29 insertions, 25 deletions
diff --git a/ext/bg/background.html b/ext/bg/background.html
index ca35a3c6..53e8b140 100644
--- a/ext/bg/background.html
+++ b/ext/bg/background.html
@@ -20,7 +20,6 @@
<script src="/mixed/lib/wanakana.min.js"></script>
<script src="/mixed/js/core.js"></script>
- <script src="/mixed/js/dom.js"></script>
<script src="/mixed/js/environment.js"></script>
<script src="/mixed/js/japanese.js"></script>
diff --git a/ext/bg/js/anki-note-builder.js b/ext/bg/js/anki-note-builder.js
index 76199db7..31e67394 100644
--- a/ext/bg/js/anki-note-builder.js
+++ b/ext/bg/js/anki-note-builder.js
@@ -155,7 +155,7 @@ class AnkiNoteBuilder {
}
static arrayBufferToBase64(arrayBuffer) {
- return window.btoa(String.fromCharCode(...new Uint8Array(arrayBuffer)));
+ return btoa(String.fromCharCode(...new Uint8Array(arrayBuffer)));
}
static stringReplaceAsync(str, regex, replacer) {
diff --git a/ext/bg/js/backend.js b/ext/bg/js/backend.js
index 90895737..80b00d5f 100644
--- a/ext/bg/js/backend.js
+++ b/ext/bg/js/backend.js
@@ -65,12 +65,14 @@ class Backend {
renderTemplate: this._renderTemplate.bind(this)
});
- this.optionsContext = {
- depth: 0,
- url: window.location.href
- };
+ const url = (typeof window === 'object' && window !== null ? window.location.href : '');
+ this.optionsContext = {depth: 0, url};
- this.clipboardPasteTarget = document.querySelector('#clipboard-paste-target');
+ this.clipboardPasteTarget = (
+ typeof document === 'object' && document !== null ?
+ document.querySelector('#clipboard-paste-target') :
+ null
+ );
this.popupWindow = null;
@@ -704,6 +706,9 @@ class Backend {
return await navigator.clipboard.readText();
} else {
const clipboardPasteTarget = this.clipboardPasteTarget;
+ if (clipboardPasteTarget === null) {
+ throw new Error('Reading the clipboard is not supported in this context');
+ }
clipboardPasteTarget.value = '';
clipboardPasteTarget.focus();
document.execCommand('paste');
@@ -1005,13 +1010,8 @@ class Backend {
}
async _onCommandToggle() {
- const optionsContext = {
- depth: 0,
- url: window.location.href
- };
const source = 'popup';
-
- const options = this.getOptions(optionsContext);
+ const options = this.getOptions(this.optionsContext);
options.general.enable = !options.general.enable;
await this._onApiOptionsSave({source});
}
diff --git a/ext/bg/js/background-main.js b/ext/bg/js/background-main.js
index 24117f4e..345b4a77 100644
--- a/ext/bg/js/background-main.js
+++ b/ext/bg/js/background-main.js
@@ -20,6 +20,9 @@
*/
(async () => {
- window.yomichanBackend = new Backend();
- await window.yomichanBackend.prepare();
+ const backend = new Backend();
+ if (typeof window === 'object' && window !== null) {
+ window.yomichanBackend = backend;
+ }
+ await backend.prepare();
})();
diff --git a/ext/bg/js/database.js b/ext/bg/js/database.js
index 930cd0d0..65e267ab 100644
--- a/ext/bg/js/database.js
+++ b/ext/bg/js/database.js
@@ -596,7 +596,7 @@ class Database {
static _open(name, version, onUpgradeNeeded) {
return new Promise((resolve, reject) => {
- const request = window.indexedDB.open(name, version * 10);
+ const request = indexedDB.open(name, version * 10);
request.onupgradeneeded = (event) => {
try {
diff --git a/ext/mixed/js/core.js b/ext/mixed/js/core.js
index 257c7edf..bf877e72 100644
--- a/ext/mixed/js/core.js
+++ b/ext/mixed/js/core.js
@@ -177,7 +177,7 @@ function promiseTimeout(delay, resolveValue) {
const complete = (callback, value) => {
if (callback === null) { return; }
if (timer !== null) {
- window.clearTimeout(timer);
+ clearTimeout(timer);
timer = null;
}
promiseResolve = null;
@@ -192,7 +192,7 @@ function promiseTimeout(delay, resolveValue) {
promiseResolve = resolve2;
promiseReject = reject2;
});
- timer = window.setTimeout(() => {
+ timer = setTimeout(() => {
timer = null;
resolve(resolveValue);
}, delay);
@@ -331,7 +331,7 @@ const yomichan = (() => {
generateId(length) {
const array = new Uint8Array(length);
- window.crypto.getRandomValues(array);
+ crypto.getRandomValues(array);
let id = '';
for (const value of array) {
id += value.toString(16).padStart(2, '0');
@@ -364,7 +364,7 @@ const yomichan = (() => {
const runtimeMessageCallback = ({action, params}, sender, sendResponse) => {
let timeoutId = null;
if (timeout !== null) {
- timeoutId = window.setTimeout(() => {
+ timeoutId = setTimeout(() => {
timeoutId = null;
eventHandler.removeListener(runtimeMessageCallback);
reject(new Error(`Listener timed out in ${timeout} ms`));
@@ -373,7 +373,7 @@ const yomichan = (() => {
const cleanupResolve = (value) => {
if (timeoutId !== null) {
- window.clearTimeout(timeoutId);
+ clearTimeout(timeoutId);
timeoutId = null;
}
eventHandler.removeListener(runtimeMessageCallback);
@@ -453,10 +453,12 @@ const yomichan = (() => {
// Private
+ _getUrl() {
+ return (typeof window === 'object' && window !== null ? window.location.href : '');
+ }
+
_getLogContext() {
- return {
- url: window.location.href
- };
+ return {url: this._getUrl()};
}
_onMessage({action, params}, sender, callback) {
@@ -469,7 +471,7 @@ const yomichan = (() => {
}
_onMessageGetUrl() {
- return {url: window.location.href};
+ return {url: this._getUrl()};
}
_onMessageOptionsUpdated({source}) {