是否可以检查是否包含任何版本的脚本?

Is it possible to check whether a script of any version has been included?

今天早些时候,我为 greasemonkey 编写了一个小脚本,它修复了 Whosebug Chat 中有时有问题的自动滚动。

我做了 // @require jquery......... 但是这导致了一些问题,因为聊天已经在较低版本中使用 jQuery 与较新版本不兼容,因为一些功能已被弃用或有已删除。

// ==UserScript==
// @name        WhosebugChat
// @namespace   deW1.net
// @include     http://chat.whosebug.com/rooms/*
// @require     http://code.jquery.com/jquery-1.11.3.min.js"
// @version     1
// @grant       none
// ==/UserScript==

$( document ).ready( function( )
{
    setInterval( function( )
    {
        $( "html , body" ).animate( 
        {
            scrollTop: $( document ).height( )
        } );
    } , 5000 );
} );

现在的问题是,我能否以某种方式检查 jQuery 是否已包含在任何版本的网页中,以便我不再 @require 它。

这主要是适用于许多不同网站的脚本,而我不知道哪个是 运行 哪个 jQuery 版本。

(我以jQuery为例,基本上任何库都可以)

你不能检查 jQuery 是否存在吗?

if ( typeof jQuery !== 'function') {
  // load jQuery
} 
// do other stuff here

这仅适用于 AMD 架构。

在没有任何依赖注入系统的页面中包含库的情况下,无法以优雅的方式检查这种情况。

但是您可以创建一个算法来检查所有包含的脚本。它可以通过使用任何类型的方法(如 regexp 或 data-attr 插入脚本标签)来完成此操作。