2012-02-09 9 views
1

"script"タグを使っていくつかのjavascriptライブラリを呼び出すHTMLページがあります。DOMをロードしているときにjavascriptライブラリが動的に変更されない場合、どうすれば動的に変更できますか?

これらのうちの1つは実際には別のサーバーによって提供され、ときどきクラッシュし、「STATUS 404 NOT FOUND」と報告されます。

このサーバーを使用する利点は、それが私のサーバーよりも速く、約200ミリ秒でライブラリをロードすることです。サーバー上にある場合は約2秒かかります。しかし、私は自分のサーバにコピーを残しておき、ブラウザがステータス404を報告したときにロードするだけです。

しかし、どうすればjavascriptでプログラムできますか?

function LoadLib(){ 

if (server status == 404) 
    {load library 1} 
else 
    {load library 2} 
} 

これらの行に何かがありますか?

誰でもこれを前に実行しましたか?

+0

jQueryを使用していますか? – Cheery

+1

[ファイルが存在するかどうかをチェックするが、コンソールの404エラーが表示されるのを防ぐ](http://stackoverflow.com/questions/7035466/check-if-file-exists-but-prevent-404-error-in-コンソールからの表示) – fyr

+0

ライブラリはOpenLayers.js –

答えて

1

このFallback for CDN hosted jQueryポストはまともな解決策を持っていました。

この例では、jQuery Microsoft CDNを使用しているため、スクリプトに応じてsrcの属性とオブジェクト検出を変更してください。

また、読み込んでいるスクリプトがいくつかのグローバル変数を作成すると仮定して、存在を確認してロードされて実行されていることを確認できます。

<script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.min.js"></script> 
<script type="text/javascript"> 
if (typeof jQuery == 'undefined') { 
    document.write(unescape("%3Cscript src='/js/jquery-1.4.2.min.js' type='text/javascript'%3E%3C/script%3E")); 
} 
</script> 

注:これだけではありません。また、AJAXリクエストを実行してその応答を読むこともできますが、それは上記のソリューションよりも複雑なコードです。

+0

Ajaxリクエストのもう一つの問題は、ライブラリコードはevalで実行する必要があるため、一部のブラウザではエラーメッセージが悪化します。 – hugomg

+0

@missingno:私はあなたが404をチェックするためにAJAXリクエストを使用し、そうでなければ(それが有効であるという意味で)DOM挿入または上記の 'document.write'メソッドを介してスクリプトタグを注入すると考えていました。そのように別のHTTP要求を引き起こしますが、キャッシングが正しく設定されている場合は、ブラウザクライアントキャッシュから2回目にスクリプトを読み込むことができ、余分なリクエストに対するヒットは無視できます。 –

関連する問題