2

私はグーグルマップローダーに取り組んでいます(グーグルマップjavascriptAPIを使用)。ポイントが利用可能になったときに、パスに動的にポイントを追加したいと思います。 編集WebページとJavaScriptは、Webサーバーを介さずに、ローカルに保存およびロードされます

この目的のために、使用したいデータを入れる外部javascriptファイルを作成しました。

私はstackoverflowの他の場所で見つけた素晴らしいトリックを使用してJavaスクリプトオブジェクトをロードします:

function loadjsfile( filename, callback )
{
    var fileref = document.createElement( 'script' );
    fileref.setAttribute( "type", "text/javascript" );
    fileref.setAttribute( "src", filename );

    var done = false;
    fileref.onload  = fileref.onreadystatechange    = function()
    {
        if( !done && ( !this.readyState 
                                || this.readyState == "loaded" 
                                || this.readyState == "complete") )
        {
                done = true;

                // Continue your code
                callback();

                // Handle memory leak in IE
                fileref.onload = fileref.onreadystatechange = null;
                document.getElementsByTagName( "script" )[0].removeChild( fileref );
        }   
    };
    document.getElementsByTagName( "script" )[0].appendChild( fileref );
}

これは、初期化を続行する前に外部JavaScriptが実際にロードされるまで待機するため、完全に機能します。

だから、それはすべて素晴らしいです。次に、外部javascriptファイルをリロードする5秒のタイムアウトを設定します。これは私が問題を抱えているところです。Google Chromeは、ディスクに直接移動するのではなく、キャッシュから外部JavaScriptファイルを再読み込みしています。これは、マップパスが進むにつれて更新されないことを意味するため、非常に苦痛です。私は本当にそれが必要です。

ページ全体を更新すると、JavaScriptが再ロードされても問題ありませんでしたが、ちらつきは非常に煩わしいものでした(そして、マップを「初期」状態に強制的に戻しました)。この新しいメソッドは、毎回javascriptファイルを強制的に再ロードできれば完全に機能します。

だから誰かが私を助けることができますか?

私はJavascript(私は主にC ++コーダーです)に非常に慣れていないので、愚かなことを尋ねている場合はお詫びします:D

4

2 に答える 2

2

他にアイデアがない場合は、ファイル名にクエリ文字列として乱数を追加してみてください。これにより、ファイルが新しく、強制的にリロードする必要があることがスクリプトに通知されます。

基本的に毎回乱数を生成します。

var rnd = Math.floor(Math.random()*80000);

したがって、コードは次のようになります

function loadjsfile( filename, callback )
{
    var rnd = Math.floor(Math.random()*80000);
    var fileref = document.createElement( 'script' );
    fileref.setAttribute( "type", "text/javascript" );
    fileref.setAttribute( "src", filename + "?r=" + rnd ); // note this line

    // other code...
}
于 2010-11-09T10:30:32.570 に答える
1

(ファイルがApache Webサーバーでホストされている場合)次の内容のスクリプトファイルを含む.htaccessファイルをディレクトリに追加できます。

Header set Cache-Control "no-cache"

これにより、ファイルがキャッシュされなくなります。

これらのヘッダー情報を送信する他の方法もあります。

于 2010-11-09T10:29:39.030 に答える