【发布时间】:2016-03-26 05:05:02
【问题描述】:
我的网页上的异步加载脚本有一个小问题。 我需要异步加载页面的所有脚本。我尝试了很多程序,我在google上找到了,但仍然不完美。
现在我是这样的:
- 将所有脚本从布局拆分为一个包,包括 jquery。
- 在页面底部调用带有异步标记的 RenderFormat。
- 现在我遇到了问题:我需要解决以下情况 脚本由@RenderFormat 呈现。问题是那些 脚本的渲染时间比我需要的早。
例如我在 Home/Index 文件中有这个:
@Scripts.RenderFormat("<script async type=\"text/javascript\" src=\"{0}\"></script>", "~/bundles/raphael")
或者干脆
...
$(".datapicker").datapicker();
...
这里我们得到错误,“$ is not defined”,因为 jquery 还没有加载。
在内容之后,在布局文件中我有:
...
@Scripts.RenderFormat("<script async type=\"text/javascript\" src=\"{0}\"></script>", "~/bundles/frontall")
...
@RenderSection("scripts", required: false)
如果我将页面上的所有脚本都放在一个包中,一切都很好,但我不希望脚本被渲染, 我只需要在特定部分执行此操作。
下一个想法是创建一个自定义的 RenderSection 方法,它将执行以下操作:
function async(u, c) {
var d = document, t = 'script',
o = d.createElement(t),
s = d.getElementsByTagName(t)[0];
o.src = u;
if (c) { o.addEventListener('load', function (e) { c(null, e); }, false); }
s.parentNode.appendChild(o, s);
}
async("/bundles/jquery", function() {
//here, load scripts from inner pages. Index, Detail...
});
有没有办法,怎么解决? 非常感谢您的宝贵时间。
【问题讨论】:
标签: javascript c# asp.net-mvc