DuckDuckGoogle

Try to search DuckDuckGo, and if it fails, use Google instead.

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

You will need to install an extension such as Tampermonkey to install this script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name DuckDuckGoogle
// @description Try to search DuckDuckGo, and if it fails, use Google instead.
// @author ForgottenUmbrella
// @namespace https://greasyfork.org/users/83187
// @version 1.0.5
// @match *://duckduckgo.com/*
// ==/UserScript==
// Return a URL for searching Google.
function googleSearchUrl(query) {
    const base = "https://www.google.com";
    return `${base}/search?q=${query}`;
}
// Return the search query on DuckDuckGo.
function ddgQuery(searchUrl) {
    const params = new URLSearchParams(searchUrl);
    return params.get("q");
}
// Return whether Firefox has encountered a proxy error.
function firefoxProxyError() {
    const errors = document.getElementsByClassName("error-message");
    return errors.length !== 0;
}
// Return whether Chrome has encountered a privacy error.
function chromePrivacyError() {
    const isNewTabPage = document.getElementById("one-google") !== null;
    // Chrome loads the new tab page when a privacy error occurs, so
    // detect whether the current page is the new tab page and return it.
    return isNewTabPage;
}
// Return whether the browser is Chrome.
function isChrome() {
    return window.chrome !== undefined;
}
// Navigate to a URL.
function goto(url) {
    location.href = url;
}
(() => {
    const failed = isChrome() ? chromePrivacyError() : firefoxProxyError();
    if (failed) {
        goto(googleSearchUrl(encodeURIComponent(ddgQuery(location.search))));
    }
})();