2012-02-07 8 views
1

多くのページと一緒に読み込まれるいくつかのJavaScriptファイルがあり、数十キロバイトのデータをダウンロードする必要があります。これらのうちの1つはjquery.min.jsですが、これは縮小されましたがまだ25kbほどです。JQuery(プラグインではない)を遅延ロードすることは可能ですか?

私の問題は、携帯電話の膨大な部分がJavaScriptをサポートしていないため、このJSファイルや他のJSファイルのダウンロードがデータの無駄であるということです。とにかく、JSファイルを呼び出すページに<script>というタグを追加することによってJQueryファイルを読み込むのは遅いですか?ブラウザがJavaScriptをサポートしている場合にのみ実行するのは明らかです。このスクリプトは、特定の条件下でのみファイルをロードするには

+1

ブラウザがJavaScriptをサポートしていない場合、私はそれがスクリプトをダウンロードするとは思わないが、Firefoxはそうではない。 –

+0

私はこれをFirefoxとFirebugでテストしました。あなたが正しいように見える(私はこれを知らなかった、ありがとう)。モバイルブラウザのための決定的な答えが慰めになるでしょう。 – Simpleton

+0

サーバーのアクセスログにアクセスできる場合は、リクエストしながらアクセスするだけです。 – Umbrella

答えて

3

、私のようなものを使用している:

<script type="text/javascript"> 
    document.write('<scr'+'ipt type="text/javascript" src="/js/jquery.min.js"></scr'+'ipt>'); 
</script> 

を注:ドキュメントの読み込みが完了した後、これはのみ、インラインで動作する、のdocument.write()は望ましくない効果を持つことになります。

注2 '</script>''</scr'+'ipt>'のように壊して、ブラウザのパーサを真のスクリプトブロックが終了したと考えることを混乱させないようにすることが重要です。私は良い方法のために同じ方法で開始スクリプトタグを行います。

+2

Nice snippet :)「スクリプト」の代わりに「Scr」+「ipt」を使用している理由を説明すると良いでしょう。(理由はわかります。 – KOGI

0
function loadScript(filename) { 
    var t = document.createElement('script'), 
     s = document.getElementsByTagName('body')[0]; 

    t.type = 'text/javascript'; 
    t.async = true; 
    t.src = filename; 
    s.parentNode.appendChild(t); 
} 

// If and when jQuery is needed, you'd load it with: 
loadScript('http://code.jquery.com/jquery.min.js'); 
+0

これは機能しますが、文書内に既にスクリプトタグがあります。他のスクリプトが含まれていない場合、これは失敗します。 – KOGI

+0

かなり正しいです。ソリューションが 'body'に追加されるようになりました。 – osahyoun

関連する問題