checkJQuery

Check jQuery.

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.cn-greasyfork.org/scripts/417760/876220/checkJQuery.js

  1. // ==UserScript==
  2. // @name checkJQuery
  3. // @namespace http://www.ocrosoft.com/
  4. // @version 0.100
  5. // @description Check jQuery.
  6. // @author ocrosoft
  7. // @grant unsafeWindow
  8. // ==/UserScript==
  9.  
  10. // jQuery
  11. var checkJQuery = function() {
  12. let jqueryCdns = [
  13. 'http://code.jquery.com/jquery-2.1.4.min.js',
  14. 'http://libs.baidu.com/jquery/2.1.4/jquery.min.js',
  15. 'http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.4.min.js',
  16. // 可能抽风,多试几次
  17. 'http://code.jquery.com/jquery-2.1.4.min.js',
  18. 'http://libs.baidu.com/jquery/2.1.4/jquery.min.js',
  19. 'http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.4.min.js',
  20. ];
  21. function isJQueryValid() {
  22. try {
  23. let wd = unsafeWindow;
  24. if (wd.jQuery && !wd.$) {
  25. wd.$ = wd.jQuery;
  26. }
  27. $();
  28. return true;
  29. } catch (exception) {
  30. return false;
  31. }
  32. }
  33. function insertJQuery(url) {
  34. let script = document.createElement('script');
  35. script.src = url;
  36. document.head.appendChild(script);
  37. return script;
  38. }
  39. function converProtocolIfNeeded(url) {
  40. let isHttps = location.href.indexOf('https://') != -1;
  41. let urlIsHttps = url.indexOf('https://') != -1;
  42.  
  43. if (isHttps && !urlIsHttps) {
  44. return url.replace('http://', 'https://');
  45. } else if (!isHttps && urlIsHttps) {
  46. return url.replace('https://', 'http://');
  47. }
  48. return url;
  49. }
  50. function waitAndCheckJQuery(cdnIndex, resolve) {
  51. if (cdnIndex >= jqueryCdns.length) {
  52. iLog.e('无法加载 JQuery,正在退出。');
  53. resolve(false);
  54. return;
  55. }
  56. let url = converProtocolIfNeeded(jqueryCdns[cdnIndex]);
  57. iLog.i('尝试第 ' + (cdnIndex + 1) + ' 个 JQuery CDN:' + url + '。');
  58. let script = insertJQuery(url);
  59. setTimeout(function() {
  60. if (isJQueryValid()) {
  61. iLog.i('已加载 JQuery。');
  62. resolve(true);
  63. } else {
  64. iLog.w('无法访问。');
  65. script.remove();
  66. waitAndCheckJQuery(cdnIndex + 1, resolve);
  67. }
  68. }, 100);
  69. }
  70. return new Promise(function(resolve) {
  71. if (isJQueryValid()) {
  72. iLog.i('已加载 jQuery。');
  73. resolve(true);
  74. } else {
  75. iLog.i('未发现 JQuery,尝试加载。');
  76. waitAndCheckJQuery(0, resolve);
  77. }
  78. });
  79. }