aboutsummaryrefslogtreecommitdiff
path: root/ext/mixed/js
diff options
context:
space:
mode:
authortoasted-nutbread <toasted-nutbread@users.noreply.github.com>2019-09-29 15:26:46 -0400
committertoasted-nutbread <toasted-nutbread@users.noreply.github.com>2019-09-29 15:26:57 -0400
commit8b7558a757447b931ee0dd1b5d724673e98bc13d (patch)
tree8838aaa2b329612bcd597cd613c5766120ed28e8 /ext/mixed/js
parent8195e5109b97c284fc1d6c8559de6e5f5941c911 (diff)
Use toIterable for cross-window origin objects
Diffstat (limited to 'ext/mixed/js')
-rw-r--r--ext/mixed/js/extension.js15
1 files changed, 13 insertions, 2 deletions
diff --git a/ext/mixed/js/extension.js b/ext/mixed/js/extension.js
index d7085e5b..5c803132 100644
--- a/ext/mixed/js/extension.js
+++ b/ext/mixed/js/extension.js
@@ -17,13 +17,24 @@
*/
+// toIterable is required on Edge for cross-window origin objects.
function toIterable(value) {
if (typeof Symbol !== 'undefined' && typeof value[Symbol.iterator] !== 'undefined') {
return value;
}
- const array = JSON.parse(JSON.stringify(value));
- return Array.isArray(array) ? array : [];
+ if (value !== null && typeof value === 'object') {
+ const length = value.length;
+ if (typeof length === 'number' && Number.isFinite(length)) {
+ const array = [];
+ for (let i = 0; i < length; ++i) {
+ array.push(value[i]);
+ }
+ return array;
+ }
+ }
+
+ throw 'Could not convert to iterable';
}
function extensionHasChrome() {