<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>@yuehei&#039;s blog &#187; javascript loader</title>
	<atom:link href="http://yuehei.37net.com/tag/javascript-loader/feed/" rel="self" type="application/rss+xml" />
	<link>http://yuehei.37net.com</link>
	<description>记点东西</description>
	<lastBuildDate>Mon, 12 Dec 2011 10:23:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>QQ群前端使用的 javascript loader</title>
		<link>http://yuehei.37net.com/2009/11/qq_javascript_loade/</link>
		<comments>http://yuehei.37net.com/2009/11/qq_javascript_loade/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 07:51:58 +0000</pubDate>
		<dc:creator>yuehei</dc:creator>
				<category><![CDATA[前台]]></category>
		<category><![CDATA[javascript loader]]></category>

		<guid isPermaLink="false">http://yuehei.37net.com/?p=63</guid>
		<description><![CDATA[开始主要想看一下qq群所使用的javascript模板，后来发现他们用的也是一个jquery的插件。 不过这个加载写的也很不错，分析了一下，原JS： http://qun.qq.com/god/m/js/loader.zh-cn.js ; &#40;function&#40;&#41; &#123; var window = this, undefined, jLoader = window.jLoader = window.jL = &#123; _version: &#34;1.2.1&#34;, _sequence: &#91;&#93;, _queue: &#123;&#125;, _xhr: function&#40;&#41; &#123; return window.ActiveXObject ? new ActiveXObject&#40;&#34;Microsoft.XMLHTTP&#34;&#41; : new XMLHttpRequest&#40;&#41;; &#125;, // 直接加载脚本 _script: function&#40;uri, context&#41; &#123; context = context &#124;&#124; document; var head = context.getElementsByTagName&#40;&#34;head&#34;&#41;&#91;0&#93; &#124;&#124; context.documentElement, script = [...]]]></description>
			<content:encoded><![CDATA[<p>开始主要想看一下qq群所使用的javascript模板，后来发现他们用的也是一个jquery的插件。<br />
不过这个加载写的也很不错，分析了一下，原JS： <a href="http://qun.qq.com/god/m/js/loader.zh-cn.js" target="_blnak">http://qun.qq.com/god/m/js/loader.zh-cn.js</a></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">;</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> window <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span>
    undefined<span style="color: #339933;">,</span>
    jLoader <span style="color: #339933;">=</span> window.<span style="color: #660066;">jLoader</span> <span style="color: #339933;">=</span> window.<span style="color: #660066;">jL</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
        _version<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;1.2.1&quot;</span><span style="color: #339933;">,</span>
        _sequence<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
        _queue<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
        _xhr<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">return</span> window.<span style="color: #660066;">ActiveXObject</span> <span style="color: #339933;">?</span> <span style="color: #003366; font-weight: bold;">new</span> ActiveXObject<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Microsoft.XMLHTTP&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> XMLHttpRequest<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
        <span style="color: #006600; font-style: italic;">// 直接加载脚本</span>
        _script<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>uri<span style="color: #339933;">,</span> context<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            context <span style="color: #339933;">=</span> context <span style="color: #339933;">||</span> document<span style="color: #339933;">;</span>
            <span style="color: #003366; font-weight: bold;">var</span> head <span style="color: #339933;">=</span> context.<span style="color: #660066;">getElementsByTagName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;head&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">||</span> context.<span style="color: #660066;">documentElement</span><span style="color: #339933;">,</span>
            script <span style="color: #339933;">=</span> context.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;script&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            script.<span style="color: #660066;">type</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">;</span>
            script.<span style="color: #660066;">src</span> <span style="color: #339933;">=</span> uri<span style="color: #339933;">;</span>
            head.<span style="color: #660066;">appendChild</span><span style="color: #009900;">&#40;</span>script<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">return</span> script<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
        _style<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>uri<span style="color: #339933;">,</span> context<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            context <span style="color: #339933;">=</span> context <span style="color: #339933;">||</span> document<span style="color: #339933;">;</span>
            <span style="color: #003366; font-weight: bold;">var</span> head <span style="color: #339933;">=</span> context.<span style="color: #660066;">getElementsByTagName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;head&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">||</span> context.<span style="color: #660066;">documentElement</span><span style="color: #339933;">,</span>
            link <span style="color: #339933;">=</span> context.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;link&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
            links <span style="color: #339933;">=</span> context.<span style="color: #660066;">getElementsByTagName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;link&quot;</span><span style="color: #339933;">,</span> context<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            link.<span style="color: #660066;">type</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;text/css&quot;</span><span style="color: #339933;">;</span>
            link.<span style="color: #660066;">rel</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;stylesheet&quot;</span><span style="color: #339933;">;</span>
            link.<span style="color: #660066;">href</span> <span style="color: #339933;">=</span> uri<span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span> <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> links.<span style="color: #660066;">length</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                 <span style="color: #003366; font-weight: bold;">var</span> _last <span style="color: #339933;">=</span> links<span style="color: #009900;">&#91;</span>links.<span style="color: #660066;">length</span> <span style="color: #339933;">-</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
                 _last.<span style="color: #660066;">parentNode</span>.<span style="color: #660066;">insertBefore</span><span style="color: #009900;">&#40;</span>_link<span style="color: #339933;">,</span> _last.<span style="color: #660066;">nextSibling</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
             <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                 head.<span style="color: #660066;">appendChild</span><span style="color: #009900;">&#40;</span>link<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
             <span style="color: #009900;">&#125;</span>
             <span style="color: #000066; font-weight: bold;">return</span> link<span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
         _replace<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>pattern<span style="color: #339933;">,</span> uri<span style="color: #339933;">,</span> context<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
             <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>pattern <span style="color: #339933;">||</span> <span style="color: #339933;">!</span>uri<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                 <span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>
             <span style="color: #009900;">&#125;</span>
             context <span style="color: #339933;">=</span> context <span style="color: #339933;">||</span> document<span style="color: #339933;">;</span>
             <span style="color: #003366; font-weight: bold;">var</span> links <span style="color: #339933;">=</span> context.<span style="color: #660066;">getElementsByTagName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;link&quot;</span><span style="color: #339933;">,</span> context<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
             <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> links.<span style="color: #660066;">length</span> <span style="color: #339933;">-</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">-</span> <span style="color: #CC0000;">1</span> <span style="color: #339933;">!=</span> links<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">href</span>.<span style="color: #660066;">indexOf</span><span style="color: #009900;">&#40;</span>pattern<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    links<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">parentNode</span>.<span style="color: #660066;">removeChild</span><span style="color: #009900;">&#40;</span>links<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>uri<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                jLoader._style<span style="color: #009900;">&#40;</span>uri<span style="color: #339933;">,</span> context<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
        <span style="color: #006600; font-style: italic;">// 将脚本内容插入当前页面来执行</span>
        _globalEval<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>data<span style="color: #339933;">,</span> context<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>data <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #009966; font-style: italic;">/\S/</span>.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                context <span style="color: #339933;">=</span> context <span style="color: #339933;">||</span> document<span style="color: #339933;">;</span>
                <span style="color: #003366; font-weight: bold;">var</span> head <span style="color: #339933;">=</span> context.<span style="color: #660066;">getElementsByTagName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;head&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">||</span> context.<span style="color: #660066;">documentElement</span><span style="color: #339933;">,</span>
                script <span style="color: #339933;">=</span> context.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;script&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                script.<span style="color: #660066;">type</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">;</span>
                <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>jLoader._excute<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    script.<span style="color: #660066;">appendChild</span><span style="color: #009900;">&#40;</span>context.<span style="color: #660066;">createTextNode</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                    script.<span style="color: #660066;">text</span> <span style="color: #339933;">=</span> data<span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
                head.<span style="color: #660066;">insertBefore</span><span style="color: #009900;">&#40;</span>script<span style="color: #339933;">,</span> head.<span style="color: #660066;">firstChild</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                head.<span style="color: #660066;">removeChild</span><span style="color: #009900;">&#40;</span>script<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
        <span style="color: #006600; font-style: italic;">// 执行回调方法数组。有可能请求多次，绑定了多个的回调方法。</span>
        _call<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>mark<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>jLoader._queue<span style="color: #009900;">&#91;</span>mark<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">callbacks</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #003366; font-weight: bold;">var</span> cl <span style="color: #339933;">=</span> jLoader._queue<span style="color: #009900;">&#91;</span>mark<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">callbacks</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span>
                <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> j <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> j <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> cl<span style="color: #339933;">;</span> j<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    jLoader._queue<span style="color: #009900;">&#91;</span>mark<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">callbacks</span><span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#40;</span>jLoader._queue<span style="color: #009900;">&#91;</span>mark<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">callbacks</span><span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
        <span style="color: #006600; font-style: italic;">// 这是一个顺序加载的过程，每加载一个JS，都会放入sequence队列，如果depend=true,则该脚本之前的脚本全部加载完后该脚本才执行</span>
        _inject<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003366; font-weight: bold;">var</span> len <span style="color: #339933;">=</span> jLoader._sequence.<span style="color: #660066;">length</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> len<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #003366; font-weight: bold;">var</span> seq <span style="color: #339933;">=</span> jLoader._queue<span style="color: #009900;">&#91;</span>jLoader._sequence<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
                <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>seq.<span style="color: #660066;">done</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>seq.<span style="color: #660066;">response</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        <span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                        seq.<span style="color: #660066;">done</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
                        seq.<span style="color: #660066;">response</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>seq.<span style="color: #660066;">response</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;;jLoader._call(<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #339933;">,</span> jLoader._sequence<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span>);&quot;</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">join</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        jLoader._globalEval<span style="color: #009900;">&#40;</span>seq.<span style="color: #660066;">response</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
        scripted<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>mark<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;undefined&quot;</span> <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">typeof</span> jLoader._queue<span style="color: #009900;">&#91;</span>mark<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>jLoader._queue<span style="color: #009900;">&#91;</span>mark<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">done</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
        script<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>options<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            options <span style="color: #339933;">=</span> options <span style="color: #339933;">||</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
            <span style="color: #006600; font-style: italic;">// 参数不全</span>
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>options.<span style="color: #660066;">mark</span> <span style="color: #339933;">||</span> <span style="color: #339933;">!</span>options.<span style="color: #660066;">uri</span><span style="color: #009900;">&#41;</span>
            <span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>
            options.<span style="color: #660066;">depend</span> <span style="color: #339933;">=</span> options.<span style="color: #660066;">depend</span> <span style="color: #339933;">||</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
            options.<span style="color: #660066;">params</span> <span style="color: #339933;">=</span> options.<span style="color: #660066;">params</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
            options.<span style="color: #000066;">onload</span> <span style="color: #339933;">=</span> options.<span style="color: #000066;">onload</span> <span style="color: #339933;">||</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">;</span>
            <span style="color: #006600; font-style: italic;">// 如果没有依赖关系和回调方法，则直接引入</span>
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>options.<span style="color: #000066;">onload</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #339933;">!</span>options.<span style="color: #660066;">depend</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                jLoader._script<span style="color: #009900;">&#40;</span>options.<span style="color: #660066;">uri</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                jLoader._queue<span style="color: #009900;">&#91;</span>options.<span style="color: #660066;">mark</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
                    uri<span style="color: #339933;">:</span> options.<span style="color: #660066;">uri</span><span style="color: #339933;">,</span>
                    response<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span>
                    done<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span>
                <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
                <span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #006600; font-style: italic;">// 是否为第一次请求</span>
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;undefined&quot;</span> <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">typeof</span> jLoader._queue<span style="color: #009900;">&#91;</span>options.<span style="color: #660066;">mark</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                jLoader._queue<span style="color: #009900;">&#91;</span>options.<span style="color: #660066;">mark</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
                    uri<span style="color: #339933;">:</span> options.<span style="color: #660066;">uri</span><span style="color: #339933;">,</span>
                    response<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span>
                    done<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">false</span>
                <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
                <span style="color: #006600; font-style: italic;">// 设置回调方法和回调的参数</span>
                <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;function&quot;</span> <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">typeof</span> options.<span style="color: #000066;">onload</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    jLoader._queue<span style="color: #009900;">&#91;</span>options.<span style="color: #660066;">mark</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">callbacks</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>options.<span style="color: #000066;">onload</span><span style="color: #339933;">,</span> options.<span style="color: #660066;">params</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #006600; font-style: italic;">// 虽然不是第一次请求，但有没有真正加载。没有真正加载的原因此时正在异步请求脚本内容</span>
                <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">false</span> <span style="color: #339933;">==</span> jLoader._queue<span style="color: #009900;">&#91;</span>options.<span style="color: #660066;">mark</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">done</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #006600; font-style: italic;">// 如果已经设置为callbacks, 则追加callbacks, 前面设置的callbacks是数组</span>
                    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;function&quot;</span> <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">typeof</span> options.<span style="color: #000066;">onload</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;undefined&quot;</span> <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">typeof</span> jLoader._queue<span style="color: #009900;">&#91;</span>options.<span style="color: #660066;">mark</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">callbacks</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                            jLoader._queue<span style="color: #009900;">&#91;</span>options.<span style="color: #660066;">mark</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">callbacks</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>options.<span style="color: #000066;">onload</span><span style="color: #339933;">,</span> options.<span style="color: #660066;">params</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
                        <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                            <span style="color: #003366; font-weight: bold;">var</span> cl <span style="color: #339933;">=</span> jLoader._queue<span style="color: #009900;">&#91;</span>options.<span style="color: #660066;">mark</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">callbacks</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span>
                            jLoader._queue<span style="color: #009900;">&#91;</span>options.<span style="color: #660066;">mark</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">callbacks</span><span style="color: #009900;">&#91;</span>cl<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>options.<span style="color: #000066;">onload</span><span style="color: #339933;">,</span> options.<span style="color: #660066;">params</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
                        <span style="color: #009900;">&#125;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #006600; font-style: italic;">// 已真正加载，直接执行回调方法</span>
                    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;function&quot;</span> <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">typeof</span> options.<span style="color: #000066;">onload</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        options.<span style="color: #000066;">onload</span><span style="color: #009900;">&#40;</span>options.<span style="color: #660066;">params</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#125;</span>
                <span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #006600; font-style: italic;">// 将脚本按顺序放入队列，self._inject会用到</span>
            <span style="color: #003366; font-weight: bold;">var</span> len <span style="color: #339933;">=</span> jLoader._sequence.<span style="color: #660066;">length</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>options.<span style="color: #660066;">depend</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                jLoader._sequence<span style="color: #009900;">&#91;</span>len<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> options.<span style="color: #660066;">mark</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #003366; font-weight: bold;">var</span> xhr <span style="color: #339933;">=</span> jLoader._xhr<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            xhr.<span style="color: #660066;">onreadystatechange</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #CC0000;">4</span> <span style="color: #339933;">==</span> xhr.<span style="color: #660066;">readyState</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #006600; font-style: italic;">// 如果设置了依赖关系，则检查依赖。如果没有设置，则执行脚本内容和回调函数</span>
                    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>options.<span style="color: #660066;">depend</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        jLoader._queue<span style="color: #009900;">&#91;</span>options.<span style="color: #660066;">mark</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">response</span> <span style="color: #339933;">=</span> xhr.<span style="color: #660066;">responseText</span><span style="color: #339933;">;</span>
                        jLoader._inject<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                        jLoader._queue<span style="color: #009900;">&#91;</span>options.<span style="color: #660066;">mark</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">done</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
                        <span style="color: #003366; font-weight: bold;">var</span> response <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>xhr.<span style="color: #660066;">responseText</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;;jLoader._call(<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #339933;">,</span> options.<span style="color: #660066;">mark</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span>);&quot;</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">join</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        jLoader._globalEval<span style="color: #009900;">&#40;</span>response<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
            xhr.<span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;GET&quot;</span><span style="color: #339933;">,</span> options.<span style="color: #660066;">uri</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            xhr.<span style="color: #660066;">send</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #006600; font-style: italic;">// 很好，很强大，因为getTime()结果不一样，所以用这种方法可以准确的定位到某一个类有没有执行</span>
    jLoader._excute <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> root <span style="color: #339933;">=</span> document.<span style="color: #660066;">documentElement</span><span style="color: #339933;">,</span>
    script <span style="color: #339933;">=</span> document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;script&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    id <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;script&quot;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">getTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    script.<span style="color: #660066;">type</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
        script.<span style="color: #660066;">appendChild</span><span style="color: #009900;">&#40;</span>document.<span style="color: #660066;">createTextNode</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;window.&quot;</span> <span style="color: #339933;">+</span> id <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;=1;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
    root.<span style="color: #660066;">insertBefore</span><span style="color: #009900;">&#40;</span>script<span style="color: #339933;">,</span> root.<span style="color: #660066;">firstChild</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#91;</span>id<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        jLoader._excute <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">delete</span> window<span style="color: #009900;">&#91;</span>id<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    root.<span style="color: #660066;">removeChild</span><span style="color: #009900;">&#40;</span>script<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://yuehei.37net.com/2009/11/qq_javascript_loade/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

