因为这个 module.js 文件依赖 jQuery 库,所以就在这个 module.js 中动态加载 jQuery (如果引用 module.js 的页面已经引用了 jQuery 就不加载,否则就加载 jQuery )。这个 module.js 里这样写为什么加载不了:
function loadJquery() {
if(!(window.jQuery)) {
var s = document.createElement('script');
s.setAttribute('src', 'http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js');
s.setAttribute('type', 'text/javascript');
document.getElementsByTagName('head')[0].appendChild(s);
}
}
$(document).ready(function () {
var module = ...
});
测试了下,这样 html 页面(本身没有引用 jQuery )引用 module.js 文件时,并没有提前加载 jQuery 库。
1
jarlyyn 2017-05-16 14:25:25 +08:00
为什么会加载?
你又没执行 loadJquery 函数…… |
2
rogwan OP @jarlyyn 感谢,刚刚这段执行拷贝到外面去了,不过剪回来贴到 module.js 里面,还是也木有用啊?
loadJquery( function() { $(function(){ alert("loadjQuery succeeded"); })(); } ); |
3
dont27 2017-05-16 14:59:36 +08:00 1
@rogwan = =原文主体 loadJquery 并没有声明以及使用函数参数,为什么你下面回复又带上了个函数参数(又不会执行到)……
|
4
joe1213 2017-05-16 15:03:43 +08:00
请复习一遍 javascript
|
5
jarlyyn 2017-05-16 15:07:19 +08:00 1
function loadJquery() {
if(!(window.jQuery)) { var s = document.createElement('script'); s.setAttribute('src', 'http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js'); s.setAttribute('type', 'text/javascript'); document.getElementsByTagName('head')[0].appendChild(s); } }() 最后带一堆括号,表示执行 |
6
jarlyyn 2017-05-16 15:07:34 +08:00
一对
|
7
rogwan OP |
8
leadfast 2017-05-16 16:12:25 +08:00 1
https://gist.github.com/leadfast/f76b06b35071ecdd8da62491a3fc8e75
之前 v2er 做的自动签到,你可以看看里面 loadAndExecute 方法的实现 |
9
SakuraKuma 2017-05-16 17:06:13 +08:00 1
要不就直接调用,
要不就 IIFE。(function (){})(); |
10
milklee 2017-05-17 00:32:32 +08:00 1
function loadJquery (cb) {
if (!window.jQuery) { var s = document.createElement('script') s.src = 'http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js' s.onload = cb document.head.appendChild(s) } else { cb() } } loadJquery(function () { alert(typeof jQuery) }) |