From f7a666cad9ca5cd83f1c146bcdffb8d6875c6b33 Mon Sep 17 00:00:00 2001 From: ncaq Date: Wed, 8 Apr 2020 13:10:24 +0900 Subject: [PATCH] fixed: e.matches: null check My Firefox verbose error is ~~~ JavaScript error: moz-extension://c04083df-5b98-4196-b0f9-c185ea86eef1/content_scripts/modules.min.js, line 1: TypeError: e.matches is not a function ~~~ So, I add null check for `e.matches`. --- content_scripts/hints.js | 6 +++--- content_scripts/utils.js | 8 ++++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/content_scripts/hints.js b/content_scripts/hints.js index c0655c64a..41dce471c 100644 --- a/content_scripts/hints.js +++ b/content_scripts/hints.js @@ -369,7 +369,7 @@ function createHints() { elements = filterInvisibleElements(cssSelector); } else { elements = getVisibleElements(function (e, v) { - if (e.matches(cssSelector) && !e.disabled && !e.readOnly) { + if (e && e.matches(cssSelector) && !e.disabled && !e.readOnly) { v.push(e); } }); @@ -489,7 +489,7 @@ function createHints() { var cssSelector = "input"; var elements = getVisibleElements(function(e, v) { - if (e.matches(cssSelector) && !e.disabled && !e.readOnly + if (e && e.matches(cssSelector) && !e.disabled && !e.readOnly && (e.type === "text" || e.type === "search" || e.type === "password")) { v.push(e); } @@ -498,7 +498,7 @@ function createHints() { if (elements.length === 0 && document.querySelector(cssSelector) !== null) { document.querySelector(cssSelector).scrollIntoView(); elements = getVisibleElements(function(e, v) { - if (e.matches(cssSelector) && !e.disabled && !e.readOnly) { + if (e && e.matches(cssSelector) && !e.disabled && !e.readOnly) { v.push(e); } }); diff --git a/content_scripts/utils.js b/content_scripts/utils.js index fd1600ac5..0ad95e76e 100644 --- a/content_scripts/utils.js +++ b/content_scripts/utils.js @@ -49,6 +49,10 @@ function isElementVisible(elm) { } function isElementClickable(e) { + if (!e) { + return false; + } + var cssSelector = "a, button, select, input, textarea, summary, *[onclick], *[contenteditable=true], *.jfk-button, *.goog-flat-menu-button, *[role=button], *[role=link], *[role=menuitem], *[role=option], *[role=switch], *[role=tab], *[role=checkbox], *[role=combobox], *[role=menuitemcheckbox], *[role=menuitemradio]"; if (runtime.conf.clickableSelector.length) { cssSelector += ", " + runtime.conf.clickableSelector; @@ -254,9 +258,9 @@ function filterOverlapElements(elements) { // filter out tiny elements elements = elements.filter(function(e) { var be = getRealRect(e); - if (e.disabled || e.readOnly || !isElementDrawn(e, be)) { + if (e && (e.disabled || e.readOnly || !isElementDrawn(e, be))) { return false; - } else if (e.matches("input, textarea, select, form") || e.contentEditable === "true") { + } else if (e && (e.matches("input, textarea, select, form") || e.contentEditable === "true")) { return true; } else { var el = document.elementFromPoint(be.left + 3, be.top + 3);