diff --git a/src/content/components/common/follow.js b/src/content/components/common/follow.js index 5688da3..ce3d19c 100644 --- a/src/content/components/common/follow.js +++ b/src/content/components/common/follow.js @@ -1,5 +1,6 @@ import messages from 'shared/messages'; import Hint from './hint'; +import * as dom from 'shared/utils/dom'; const TARGET_SELECTOR = [ 'a', 'button', 'input', 'textarea', @@ -136,8 +137,9 @@ export default class Follow { case 'button': return element.click(); default: - // it may contenteditable - return element.focus(); + if (dom.isContentEditable(element)) { + return element.focus(); + } } } diff --git a/src/content/components/common/input.js b/src/content/components/common/input.js index f285b0c..ef5af29 100644 --- a/src/content/components/common/input.js +++ b/src/content/components/common/input.js @@ -1,3 +1,5 @@ +import * as dom from 'shared/utils/dom'; + const modifierdKeyName = (name) => { if (name.length === 1) { return name.toUpperCase(); @@ -78,12 +80,12 @@ export default class InputComponent { } fromInput(e) { + if (!e.target) { + return false; + } return e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement || e.target instanceof HTMLSelectElement || - e.target instanceof HTMLElement && - e.target.hasAttribute('contenteditable') && ( - e.target.getAttribute('contenteditable').toLowerCase() === 'true' || - e.target.getAttribute('contenteditable').toLowerCase() === ''); + dom.isContentEditable(e.target); } } diff --git a/src/shared/utils/dom.js b/src/shared/utils/dom.js new file mode 100644 index 0000000..c111ee7 --- /dev/null +++ b/src/shared/utils/dom.js @@ -0,0 +1,8 @@ +const isContentEditable = (element) => { + return element.hasAttribute('contenteditable') && ( + element.getAttribute('contenteditable').toLowerCase() === 'true' || + element.getAttribute('contenteditable').toLowerCase() === '' + ); +}; + +export { isContentEditable };