gpt4 book ai didi

javascript - 是的 - 等待依赖项加载

转载 作者:行者123 更新时间:2023-11-29 22:16:25 24 4
gpt4 key购买 nike

在 ASP.NET Masterpage 中,我使用 YepNope 无条件地异步加载 jQuery(来自 Google CDN,具有本地回退)和网站所有页面上使用的一些脚本。在 MasterPage 中,我在结束 body 标记之前创建了一个 ContentPlaceHolder(并在加载所有页面上使用的 YepNope 脚本下方),用于单个页面上使用的脚本。由于 jQuery 应该在站点的每个页面上都可用,因此不应在有特定脚本使用它的那些页面上单独加载它。

我遇到的问题是我无法在加载 jQuery 的 yepnope 脚本中使用回调或完整函数,因为这是在 MasterPage 上,并且这些是单独的页面脚本,仅在该页面上使用或添加,但是我需要能够延迟执行各个页面脚本,直到 yepnope(出现在页面脚本上方)完成加载其中使用的任何依赖项(例如 jQuery)。

我可以想到两个选项-

1- 使页面上使用的脚本成为外部文件并使用语法加载它 -

yepnope('/url/to/your/script.js'); 

yepnope({ load: '/url/to/your/script.js' });

我不确定我是否喜欢这个想法,因为它为几行不会在任何其他页面上使用的 javascript 引入了额外的 HTTP 请求。

2- 在另一个 yepnope 测试对象 block 中再次加载 jQuery,完整的函数包装页面脚本(在加载之前的脚本之前调用 complete 似乎立即执行函数)并依赖于以下 -

I am requesting a file twice and it's only loading once? By popular demand, in yepnope 1.5+ we added the feature that scripts that have already been requested not be re-executed when they are requested a second time. This can be helpful when you are dealing with less complex serverside templating system and all you really care about is that all of your dependencies are available.

在页面中,我大概可以从 Google CDN 加载相同版本的 jQuery,基于上述内容实际上不会加载两次,然后在从 yepnope 的完整函数调用的匿名函数中加载页面脚本测试对象。<​​/p>

从好的方面来说,这意味着页面不再依赖于从 MasterPage 加载的 jQuery,但不利的一面是(即使假设 YepNope 现在不加载脚本两次)我们将加载多个版本的jQuery 应该更改 MasterPage 中的版本,而不会在将来的页面中发生相同的情况。从维护的 Angular 来看,我认为这不是一个好主意,尤其是假设(我认为您应该始终这样做)另一位开发人员将进行更改。

看起来也不是特别优雅。

总的来说,我几乎肯定会使用第一个选项,但我想知道是否有一种方法可以延迟或推迟页面上的脚本,直到异步加载完成,而这不能作为 YepNope 测试对象的一部分来完成加载资源。

其他开发者如何解决这个问题?

最佳答案

我想出了一个我很喜欢的解决方案。

在 MasterPage YepNope 测试对象中添加代码-

complete: function() {
if (window.pageFunctions !== null && typeof (window.pageFunctions) === "function") {
window.pageFunctions();
}
}

如果我想添加依赖于 MasterPage 中加载的依赖项的任何 JavaScript 代码或函数,我只需将它们包装在一个名为“pageFunctions”的函数中,就像这样-

<script type="text/javascript">
function pageFunctions() {
$(document).ready(function () {
...
});
}
</script>

我仍然对其他(可能更好的)解决方案感兴趣,所以我打算将这个问题悬而未决几天。

我也很感激对此作为解决方案的评论。

关于javascript - 是的 - 等待依赖项加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14923645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com