1

複数の HTML ファイルのスクリプトを処理する JavaScript ファイルがあります。

すべてが書き出されたばかりで、関数で何も呼び出されないため、問題が発生し始めました(したがって、たとえば、各呼び出しは1ページ1でのみ呼び出す必要がありますが、すべてのAJAX呼び出しはすべてのページで呼び出されます)。

これを改善/修正するための最良の方法は何ですか? 私が考えた方法は以下の2つです。

  1. HTML ファイルごとに個別の JS ファイルを作成する
  2. すべての JS コードを関数に入れ、各関数をそれぞれ呼び出す

私はすべてのコードを関数に入れることに傾いています。しかし、私がしたとき:

<script src="the_source">
  call_function
</script>

それはうまくいかなかったようです。責任のある HTML があった場所の直前にそれを置きました。私はもともと次のように Haml でそれを書きました:

%script{:src => "src"}
  call_function

この HTML 関数呼び出しを機能させるにはどうすればよいですか?

それとも、各 HTML ファイルが異なる JS ファイルを持つように分離することで、より良い解決策と見なされますか? 問題は、それらの間で多くの共有コードがあることです。これを解決するために、必要に応じて他の JS ファイルから呼び出すことができるオブジェクト内の共有コードを含む別のファイルを作成できます。

この問題に対するよりクリーンなアプローチ/解決策は何ですか?

4

3 に答える 3

1

これは、ホスティング プランによって異なります。

専用サーバーまたは半専用サーバーの場合は、(パフォーマンスのために) 共有 JavaScript ファイルを使用することをお勧めします。

他の種類の場合は、別の JS ファイルにリクエストの負荷を分散するため、別のファイルの方が高速です。

面倒なので別々のファイルを作成したくない場合は、次のことをお勧めします。

<script src="somewhere">
var page = "<?PHP echo basename($_SERVER['PHP_SELF']); ?>";
Run_Function();
</script>

どこかで:

function Run_function(){
switch(page){
case "1.php":
//Do Something
break;
case "2.php":
//Do Something else
break;
default:
alert("Unregistered webpage");
break;
}

幸運を祈ります:D

編集:

URL からファイル名を取得するには、次の関数を試してください。

function FileName(){
var url = window.location.pathname;
var filename = url.substring(url.lastIndexOf('/')+1);
return filename:
}

アップデート:

上記の改善された機能を確認してください。

function FileName(){
var url = window.location.pathname;
var filename = url.substring(url.lastIndexOf('/')+1);
if(filename == "" || filename == "Undefined"){
filename = "index.ruby";//or any other extension
}else{
var filename = filename.replace(/%C3%84/g, "Ä");
var filename = filename2.replace(/%C3%96/g, "Ö");
var filename = filename2.replace(/%C3%9C/g, "Ü");
var filename = filename2.replace(/%C3%A4/g, "ä");
var filename = filename2.replace(/%C3%B6/g, "ö");
var filename = filename2.replace(/%C3%BC/g, "ü");    
}
return filename:
}

この機能はより多くの人に役立つ可能性があり、より柔軟に使用できます。

于 2013-09-06T13:41:38.630 に答える
1

関数を呼び出すには:

call_function();

編集:

<script src="the_source"></script>
<script >
  call_function();
</script>

" the_source" は js ファイルへのパスです

編集を終了

すべてのページでロジックを分離するには、いくつかの設定オブジェクトを作成し、分離したい場合のフラグをそこに置きます。

//this code should be on every page you need your javascript file
<script src="the_source"></script>
<script>
  var settings = {
        mode:'doSomething1'
  }
  call_function(settings);
</script>

あなたのjsファイルで、settings.modeの値に応じて物事を行います:

function call_function(settings)
{
    switch(settings.mode){
        case: 'doSomething1':
            //code for case1
            break;
        case: 'doSomething2':
            //code for case2
            break;
        default: 
            //code for default case
            break;
    }
}
于 2013-09-06T13:23:54.230 に答える
0

あなたの JS コードを、各ページに 1 つずつ、いくつかの異なるファイルに入れます。これにより、必要な機能を見つけるためにブラウザーが大量のコードを実行することがなくなるため、サイトの実行が速くなります (確かにそれほどではありません)。また、(これは単なる個人的な意見です)、短い関数の長いリストだけを含むJSファイルは非常に見苦しく、効率が悪いようです。

そして、共有コードをオンにした追加のファイルを含めます。ファイル内で不必要に繰り返されていないことを確認してください。幸運を!:)

于 2013-09-06T13:18:25.497 に答える