Max*_*ios 6 javascript jquery jquery-ui jquery-plugins
我正在尝试封装我使用jQuery,jQuery UI,jQuery Form和xmlDom构建的javascript.
我希望能够向我的客户端发送一个引用其他javascript的javascript,包括一小段用于选项设置的js.
在下面找一个例子:
<script language="javascript">
var myOptions = {
shop: 1,
style: "gold"
}
load();
</script>
<script src="http://myServer/myScript.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
我几乎不可能动态加载jQuery和插件.我读了很多例子,当我动态加载它时,jQuery工作正常,但其余的扩展从未正常工作.以下序列是加载至少几个插件的唯一序列:
设置一个动态加载jQuery的加载函数:
load = function() {
load.getScript(url_base + "/js/jquery-1.3.2.js");
load.tryReady(0);
}
load.getScript = function(filename) {
var script = document.createElement('script')
script.setAttribute("type","text/javascript")
script.setAttribute("src", filename)
if (typeof script!="undefined")
document.getElementsByTagName("head")[0].appendChild(script)
}
load.tryReady = function(time_elapsed) {
// Continually polls to see if jQuery is loaded.
if (typeof $ == "undefined") { // if jQuery isn't loaded yet...
if (time_elapsed <= 5000) { // and we havn't given up trying...
setTimeout("load.tryReady(" + (time_elapsed + 200) + ")", 200); // set a timer to check again in 200 ms.
} else {
alert("Timed out while loading jQuery.")
}
} else {
...
}
Run Code Online (Sandbox Code Playgroud)
之后加载每个插件,jQueryForm,jQuery UI,xmlDom
当我检查jQuery表单时,它可用:
if (jQuery().ajaxForm)
Run Code Online (Sandbox Code Playgroud)
当我检查xmlDom它工作.
当我检查jQuery UI时,它永远不可用.
if(jQuery().ui)
Run Code Online (Sandbox Code Playgroud)
如果我设置等待UI的超时并不重要,它永远不会被加载.似乎是jQuery在加载之前执行我的UI功能.
任何人都可以给我一个链接来帮助解决这个问题吗?
也许,这可能会有所帮助.来自dive.into.javascript网站:
SidJS是一个轻量级JavaScript库,用于按需加载JavaScript脚本和CSS样式表.它通过在需要时加载资源来提高AJAX应用程序的性能.
通过Google Closure Compiler缩小,它的重量为1.12KB(GZipped时为625字节).
如果你绝对不能包含另一个javascript库,你可以看看代码(真的没有太多的代码); 有了这些想法,你应该能够修复你的脚本.
编辑
如果您使用Google Closure Compiler缩小脚本,则需要添加该node.sheet.cssRules
行.它似乎在Gecko和Webkit浏览器中使用,以测试是否已完全下载延迟加载的样式表(当然,如果您不是延迟加载样式表,则可以完全删除该部分).
小智 3
正如 Python 之禅所说:“简单胜于复杂”。所有这些超时混乱值得吗?正如我所假设的,浏览器必须以任何方式加载所有 js 库(以执行“myScript.js”文件),所以“正常”包含它们不是更容易吗?