I'm creating a jquery plugin and I want to verify an external script is loaded. This is for an internal web app and I can keep the script name/location consistent(mysscript.js). This is also an ajaxy plugin that can be called on many times on the page.

如果我可以验证脚本是否未加载,我将使用以下方法加载它:

jQuery.getScript()

How can I verify the script is loaded because I don't want the same script loaded on the page more than once? Is this something that I shouldn't need to worry about due to caching of the script?

更新: 在我们的组织中,我可能无法控制谁使用此插件,也可能无法强制该脚本不在页面上,无论是否具有特定ID,但脚本名称将始终位于相同的位置,具有相同的名称.我希望我可以使用脚本的名称来验证它是否已实际加载.

推荐答案

如果脚本在全局空间中创建了任何变量或函数,您可以判断它们是否存在:

外部JS(在全局)--

var myCustomFlag = true;

并判断是否已运行:

if (typeof window.myCustomFlag == 'undefined') {
    //the flag was not found, so the code has not run
    $.getScript('<external JS>');
}

Update

You can check for the existence of the <script> tag in question by selecting all of the <script> elements and checking their src attributes:

//get the number of `<script>` elements that have the correct `src` attribute
var len = $('script').filter(function () {
    return ($(this).attr('src') == '<external JS>');
}).length;

//if there are no scripts that match, the load it
if (len === 0) {
    $.getScript('<external JS>');
}

Or you can just bake this .filter() functionality right into the selector:

var len = $('script[src="<external JS>"]').length;

Jquery相关问答推荐

使用jquery将外部代码插入div

如何解决“重定向已被 CORS 策略阻止:没有 'Access-Control-Allow-Origin' 标头”?

无法在被动事件侦听器中阻止默认值

JQuery:如果 div 可见

未捕获的类型错误:$.post 不是函数

N 次(声明式语法)

移动 chrome 在滚动时触发调整大小事件

删除索引后的所有项目

Chart.js 中饼图的点击事件

在大写字母前插入空格

使用 Typescript 时如何停止“类型 JQuery 上不存在属性”语法错误?

ReactJS SyntheticEvent stopPropagation() 仅适用于 React 事件?

如何使用 jQuery 或纯 JavaScript 获取 URL 参数?

$(this) 和 event.target 之间的区别?

将带有数字键的 JavaScript 对象转换为数组

jquery - 单击事件不适用于动态创建的按钮

如何获得两个日期对象之间的小时差?

选择select2后触发动作

如何使用 jQuery 判断所有复选框?

jQuery 的 .on() 方法结合提交事件