如果尚未包含jQuery,请包含它。

9
我希望在文件中包含jQuery,如果页面上还没有包含它。 我该怎么做?
我写了这个,但它输出的结果不是我想要的。
<script type="text/javascript">
if ('undefined' == typeof window.jQuery) {
    // jQuery not present
//  alert("Jquery Unavailable");
<?php echo '<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js"></script>'; ?>
} else {
    // jQuery present
    alert("Jquery Available");
}
</script>

相关链接:http://stackoverflow.com/questions/6787569/best-way-to-avoid-including-stylesheets-external-js-more-than-once-in-a-page - Shadow The Spring Wizard
5个回答

16

在PHP中你不能这样做。尝试使用下面的方法替代。

<script type="text/javascript">

if(typeof jQuery == 'undefined'){
        document.write('<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js"></'+'script>');
  }

</script>

1
那种onload处理程序的赋值方式会冒着被覆盖的风险。此外,在onload事件触发后调用document.write将破坏现有文档! - Quentin
@Sethunath:你的代码和我的代码都无法工作。 当我在页面中执行此操作时,内部</script>后面的结尾会出现在页面上**'); }**。 - Thompson
链接中从未解释使用document.write的危险。 - Sethunath K M
使用此代码会出现警告 - 通过document.write调用了一个解析器阻止、跨站点(即不同的eTLD+1)脚本,http://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js。由于网络连接差,浏览器可能会在此或将来的页面加载中阻止它。如果在此页面加载中被阻止,将在后续的控制台消息中进行确认。有关更多详细信息,请参见https://www.chromestatus.com/feature/5718547946799104。 - Ramratan Gupta

11
<script type="text/javascript">
    if(typeof jQuery == 'undefined'){
        var oScriptElem = document.createElement("script");
        oScriptElem.type = "text/javascript";
        oScriptElem.src = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js";
        document.head.insertBefore(oScriptElem, document.head.getElementsByTagName("script")[0])
    }
</script>

其他答案中有许多在脚本标签内嵌套脚本标签的做法。我更喜欢你的回答。我的唯一建议是不要检查jQuery的类型,只需将其与undefined进行比较。if(jQuery == undefined) - Dustin Poissant
尽管在上面的某些代码中重新定义了undefined,但是undefined可能并不是未定义的。但是请按照您认为最好的方式进行操作。 - noob

10

你可以尝试以下方法:

<script>window.jQuery || document.write('<script src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js"><\/script>')</script>

4
您的PHP正在服务器上运行并输出一些文本。
然后,浏览器将该文本解释为HTML和JavaScript。
您不能在服务器上运行PHP,在已发送给浏览器的文档中,在响应于浏览器中运行的逻辑时。
您可以使用JavaScript完全实现此操作,或者更加明智的是,整理您的服务器端逻辑,以跟踪是否已包含jQuery。

0
如果您想使用PHP来实现,我认为这是更好的方法,您可以这样做:
  • 在调用load()函数之前创建一个变量:
  • var load_script = 'no';

  • load()函数有一个可选参数,您可以使用它将数据发送到服务器。使用它来发布您之前创建的load_script变量,如下所示:
  • $('#receiver_div').load('mypage.html',{'load_script':load_script},function(html){

    //页面加载后要执行的操作

    })

  • 然后,在您正在加载的页面中,可以像这样捕获已发布的值:
  • $load_script = $_POST('load_script');

  • 然后,您可以使用if语句来排除您不想要的脚本,如下所示:

if($load_script != 'no') {

echo "<script src="jquery.js"></script>";

}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接