DuckDuckGoogle

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

// ==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))));
    }
})();