Check jQuery.
This script should not be not be installed directly. It is a library for other scripts to include with the meta directive // @require https://update.greasyfork.org/scripts/417760/876220/checkJQuery.js
// ==UserScript== // @name checkJQuery // @namespace http://www.ocrosoft.com/ // @version 0.100 // @description Check jQuery. // @author ocrosoft // @grant unsafeWindow // ==/UserScript== // jQuery var checkJQuery = function() { let jqueryCdns = [ 'http://code.jquery.com/jquery-2.1.4.min.js', 'http://libs.baidu.com/jquery/2.1.4/jquery.min.js', 'http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.4.min.js', // 可能抽风,多试几次 'http://code.jquery.com/jquery-2.1.4.min.js', 'http://libs.baidu.com/jquery/2.1.4/jquery.min.js', 'http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.4.min.js', ]; function isJQueryValid() { try { let wd = unsafeWindow; if (wd.jQuery && !wd.$) { wd.$ = wd.jQuery; } $(); return true; } catch (exception) { return false; } } function insertJQuery(url) { let script = document.createElement('script'); script.src = url; document.head.appendChild(script); return script; } function converProtocolIfNeeded(url) { let isHttps = location.href.indexOf('https://') != -1; let urlIsHttps = url.indexOf('https://') != -1; if (isHttps && !urlIsHttps) { return url.replace('http://', 'https://'); } else if (!isHttps && urlIsHttps) { return url.replace('https://', 'http://'); } return url; } function waitAndCheckJQuery(cdnIndex, resolve) { if (cdnIndex >= jqueryCdns.length) { iLog.e('无法加载 JQuery,正在退出。'); resolve(false); return; } let url = converProtocolIfNeeded(jqueryCdns[cdnIndex]); iLog.i('尝试第 ' + (cdnIndex + 1) + ' 个 JQuery CDN:' + url + '。'); let script = insertJQuery(url); setTimeout(function() { if (isJQueryValid()) { iLog.i('已加载 JQuery。'); resolve(true); } else { iLog.w('无法访问。'); script.remove(); waitAndCheckJQuery(cdnIndex + 1, resolve); } }, 100); } return new Promise(function(resolve) { if (isJQueryValid()) { iLog.i('已加载 jQuery。'); resolve(true); } else { iLog.i('未发现 JQuery,尝试加载。'); waitAndCheckJQuery(0, resolve); } }); }