From 5929a184a445a0a81608bb5c58b46cc6922913ea Mon Sep 17 00:00:00 2001 From: josc146 Date: Fri, 26 Jan 2024 11:27:31 +0800 Subject: [PATCH] fix mounting failure caused by DuckDuckGo's initial rendering delay. #610 --- src/content-script/site-adapters/duckduckgo/index.mjs | 11 +++++++++++ src/content-script/site-adapters/index.mjs | 4 ++++ src/utils/wait-for-element-to-exist-and-select.mjs | 8 +++++++- 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 src/content-script/site-adapters/duckduckgo/index.mjs diff --git a/src/content-script/site-adapters/duckduckgo/index.mjs b/src/content-script/site-adapters/duckduckgo/index.mjs new file mode 100644 index 0000000..52c0856 --- /dev/null +++ b/src/content-script/site-adapters/duckduckgo/index.mjs @@ -0,0 +1,11 @@ +import { waitForElementToExistAndSelect } from '../../../utils/index.mjs' +import { config } from '../index' + +export default { + init: async (hostname, userConfig) => { + if (userConfig.insertAtTop) { + return !!(await waitForElementToExistAndSelect(config.duckduckgo.resultsContainerQuery[0], 5)) + } + return true + }, +} diff --git a/src/content-script/site-adapters/index.mjs b/src/content-script/site-adapters/index.mjs index 52ef58c..711678e 100644 --- a/src/content-script/site-adapters/index.mjs +++ b/src/content-script/site-adapters/index.mjs @@ -10,6 +10,7 @@ import stackoverflow from './stackoverflow' import juejin from './juejin' import weixin from './weixin' import followin from './followin' +import duckduckgo from './duckduckgo' /** * @typedef {object} SiteConfigAction @@ -55,6 +56,9 @@ export const config = { sidebarContainerQuery: ['.js-react-sidebar', '.react-results--sidebar'], appendContainerQuery: ['#links_wrapper'], resultsContainerQuery: ['.react-results--main'], + action: { + init: duckduckgo.init, + }, }, startpage: { inputQuery: ["input[name='query']"], diff --git a/src/utils/wait-for-element-to-exist-and-select.mjs b/src/utils/wait-for-element-to-exist-and-select.mjs index 2ba6bd1..bc66dca 100644 --- a/src/utils/wait-for-element-to-exist-and-select.mjs +++ b/src/utils/wait-for-element-to-exist-and-select.mjs @@ -1,4 +1,4 @@ -export function waitForElementToExistAndSelect(selector) { +export function waitForElementToExistAndSelect(selector, timeout = 0) { return new Promise((resolve) => { if (document.querySelector(selector)) { return resolve(document.querySelector(selector)) @@ -15,5 +15,11 @@ export function waitForElementToExistAndSelect(selector) { subtree: true, childList: true, }) + + if (timeout) + setTimeout(() => { + observer.disconnect() + resolve(null) + }, timeout) }) }