JavaScript を Web ページから移動する
移動するスクリプト コンテンツの検索
ゲッティイメージズ/アーミンガット
新しい JavaScript を初めて作成する場合、最も簡単な設定方法は、JavaScript コードを Web ページに直接埋め込むことです。これにより、すべてが 1 か所にまとめられ、正しく動作するかどうかをテストすることができます。同様に、事前に作成されたスクリプトを Web サイトに挿入する場合、スクリプトの一部またはすべてを Web ページ自体に埋め込むよう指示される場合があります。
これは、最初にページを設定して適切に動作させるには問題ありませんが、ページが希望どおりに動作するようになったら、JavaScript を外部ファイルに抽出してページを改善できるようになります。 HTML のコンテンツは、JavaScript などのコンテンツ以外の項目でそれほど雑然としていません。
他の人が書いた JavaScript をコピーして使用するだけの場合、スクリプトをページに追加する方法に関する彼らの指示により、JavaScript の 1 つまたは複数の大きなセクションが実際に Web ページ自体に埋め込まれ、その指示ではわからない可能性があります。このコードをページから別のファイルに移動しても、JavaScript は機能します。ただし、ページで使用している JavaScript のコードに関係なく、JavaScript をページから簡単に移動して、別のファイル (または複数の JavaScript が埋め込まれている場合はファイル) として設定できるため、心配する必要はありません。ページ)。これを行うプロセスは常に同じであり、例を使用して説明するのが最適です。
JavaScript の一部がページに埋め込まれたときにどのように見えるかを見てみましょう。実際の JavaScript コードは、次の例に示すものとは異なりますが、プロセスはどの場合でも同じです。
例 1
|_+_|例 2
|_+_|例 3
|_+_|埋め込まれた JavaScript は、上記の 3 つの例のいずれかのようになります。もちろん、実際の JavaScript コードは表示されているものとは異なりますが、JavaScript はおそらく上記の 3 つの方法のいずれかを使用してページに埋め込まれます。場合によっては、コードで古い language='ジャバスクリプト' それ以外の type='text/javascript' その場合、言語属性を type 属性に置き換えることで、コードを最新のものにすることができます。
JavaScript を独自のファイルに抽出する前に、まず抽出するコードを特定する必要があります。上記の 3 つの例すべてで、抽出される実際の JavaScript コードは 2 行あります。スクリプトにはおそらくもっと多くの行が含まれますが、上記の 3 つの例で強調表示した JavaScript の 2 行と同じ場所をページ内で占めるため、簡単に識別できます (3 つのすべての例に同じ 2 行が含まれています)。 JavaScript の場合、わずかに異なるのはそれらの周りのコンテナーだけです)。
- JavaScript を実際に別のファイルに抽出するために最初に行う必要があるのは、プレーン テキスト エディターを開いて、Web ページのコンテンツにアクセスすることです。次に、上記の例に示されているコードのバリエーションの 1 つで囲まれる埋め込み JavaScript を見つける必要があります。
- 必要な JavaScript コードを見つけたら、それを選択してクリップボードにコピーします。上記の例では、選択するコードが強調表示されているため、JavaScript コードの周囲に表示されるスクリプト タグやオプションのコメントを選択する必要はありません。
- プレーン テキスト エディターの別のコピー (エディターが一度に複数のファイルを開くことをサポートしている場合は別のタブ) を開き、そこにある JavaScript コンテンツを通過します。
- 新しいファイルに使用するわかりやすいファイル名を選択し、そのファイル名を使用して新しいコンテンツを保存します。サンプル コードでは、スクリプトの目的はフレームから抜け出すことであり、適切な名前は次のようになります。 framebreak.js .
- これで、JavaScript が別のファイルに保存され、エディタに戻ります。そこで元のページ コンテンツに変更を加え、スクリプトの外部コピーにリンクします。
- 別のファイルにスクリプトがあるので、元のコンテンツの script タグ間のすべてを削除して、
- 最後のステップは、スクリプト タグに追加の属性を追加して、外部 JavaScript を見つけることができる場所を特定することです。これは、 src='ファイル名' 属性。サンプル スクリプトでは、src='framebreak.js' を指定します。
- これが唯一複雑になるのは、外部 JavaScript を、それらを使用する Web ページとは別のフォルダーに格納することにした場合です。これを行う場合、Web ページ フォルダーから JavaScript フォルダーへのパスをファイル名の前に追加する必要があります。たとえば、JavaScript が js 必要な Web ページを保持するフォルダー内のフォルダー src='js/framebreak.js'
JavaScript を別のファイルに分離した後、コードはどのように見えるでしょうか?サンプル JavaScript の場合 (JavaScript と HTML が同じフォルダーにあると仮定)、Web ページの HTML は次のようになります。
|_+_|以下を含む framebreak.js という別のファイルもあります。
|_+_|
Web ページに埋め込まれた JavaScript をすべて抽出し、その機能に基づいてファイルにわかりやすい名前を付けているため、ファイル名とファイルの内容はそれとは大きく異なります。それを抽出する実際のプロセスは、含まれている行に関係なく同じです。
例 2 と例 3 のそれぞれの他の 2 行はどうでしょうか。例 2 のこれらの行の目的は、Netscape 1 と Internet Explorer 2 から JavaScript を隠すことです。どちらももう使用されていないため、そもそもこれらの行は実際には必要ありません。コードを外部ファイルに配置すると、HTML コメントでコードを囲むよりも効果的に script タグを理解しないブラウザーからコードを隠すことができます。 3 番目の例は、XHTML ページで使用され、JavaScript をページ コンテンツとして扱う必要があり、HTML として検証しないことをバリデーターに伝えます (XHTML ではなく HTML doctype を使用している場合、バリデーターはこれを既に認識しているため、それらのタグ必要ありません)。別のファイルに JavaScript を使用すると、バリデーターによってスキップされるページ内の JavaScript がなくなるため、これらの行は不要になります。
JavaScript を使用して Web ページに機能を追加する最も便利な方法の 1 つは、訪問者のアクションに応答して何らかの処理を実行することです。応答したい最も一般的なアクションは、訪問者が何かをクリックしたときです。訪問者が何かをクリックしたことに応答できるようにするイベント ハンドラーが呼び出されます。 オンクリック .
Web ページに onclick イベント ハンドラを追加することを最初に考えるとき、ほとんどの人はすぐにそれを 鬼ごっこ。これにより、次のようなコードが得られます。
|_+_|
これは 違う JavaScript を使用していないユーザーがリンクをクリックしたときにどこかに転送されるように、href 属性に実際の意味のあるアドレスがない限り、onclick を使用する方法。また、多くの人がこのコードから「return false」を除外し、スクリプトの実行後に現在のページの上部が常に読み込まれるのはなぜなのか疑問に思っています (これは、href='#' がページに実行するように指示していることです)。すべてのイベント ハンドラーから false が返されます. もちろん、リンク先として意味のあるものがある場合は、onclick コードを実行した後にそこに移動したい場合があります。
多くの人が気付いていないのは、onclick イベント ハンドラを どれか 訪問者がそのコンテンツをクリックしたときに対話するための Web ページの HTML タグ。したがって、人々が画像をクリックしたときに何かを実行したい場合は、次を使用できます。
|_+_|
人々がテキストをクリックしたときに何かを実行したい場合は、次を使用できます。
|_+_|もちろん、これらは、訪問者がリンクのようにクリックした場合に応答があるという自動的な視覚的手がかりを提供しませんが、画像またはスパンを適切にスタイリングすることで、その視覚的手がかりを自分で簡単に追加できます.
onclick イベント ハンドラーをアタッチするこれらの方法について注意すべきもう 1 つの点は、無効にする必要がある要素がクリックされたときに発生する既定のアクションがないため、「return false」を必要としないことです。
onclick をアタッチするこれらの方法は、多くの人が使用する貧弱な方法を大幅に改善しますが、それをコーディングする最良の方法にはまだほど遠いです。上記の方法のいずれかを使用して onclick を追加する際の問題の 1 つは、まだ JavaScript を HTML に混ぜていることです。 オンクリック は いいえ HTML 属性であり、JavaScript イベント ハンドラーです。そのため、JavaScript を HTML から分離してページの保守を容易にするために、onclick 参照を HTML ファイルから取得して、それが属する別の JavaScript ファイルにする必要があります。
これを行う最も簡単な方法は、HTML の onclick を ID これにより、イベント ハンドラーを HTML の適切な場所に簡単に追加できます。したがって、HTML には次のいずれかのステートメントが含まれている可能性があります。
|_+_|次に、ページの本文の下部にリンクされているか、ページの先頭にあり、コードがページの読み込みが完了した後に呼び出される関数内にある別の JavaScript ファイルに JavaScript をコーディングできます。 .イベント ハンドラーをアタッチする JavaScript は次のようになります。
|_+_|注意すべきことが1つあります。 onclick は常にすべて小文字で書かれていることに気付くでしょう。 HTML でステートメントをコーディングする場合、onClick と記述する人もいます。 JavaScript イベント ハンドラーの名前はすべて小文字であり、onClick などのハンドラーがないため、これは誤りです。 HTML では大文字と小文字が区別されず、ブラウザーが正しい名前にマップするため、HTML タグ内に JavaScript を直接含めると、問題を回避できます。 JavaScript では大文字と小文字が区別され、JavaScript には onClick のようなものがないため、JavaScript 自体で間違った大文字を使用することはできません。
このコードは、HTML 内の正しい要素にイベントをアタッチし、JavaScript を HTML から完全に分離しているため、以前のバージョンよりも大幅に改善されています。ただし、これをさらに改善することができます。
残っている 1 つの問題は、特定の要素に 1 つの onclick イベント ハンドラーしかアタッチできないことです。同じ要素に別の onclick イベント ハンドラーをアタッチする必要がある場合は、以前にアタッチされていた処理がその要素にアタッチされなくなります。さまざまな目的でさまざまなスクリプトを Web ページに追加する場合、同じ要素がクリックされたときに実行される処理を提供するスクリプトが少なくとも 2 つ以上ある可能性があります。この問題の厄介な解決策は、この状況が発生する場所を特定し、すべての処理を実行する関数にまとめて呼び出す必要がある処理を結合することです。
このようなクラッシュは、onload よりも onclick の方が一般的ではありませんが、事前にクラッシュを特定してそれらを組み合わせる必要があることは、理想的な解決策ではありません。要素にアタッチする必要がある実際の処理が時間の経過とともに変化するため、1 つのこと、別のこと、または両方を行う場合は、まったく解決策ではありません。
最善の解決策は、イベント ハンドラーの使用を完全に停止し、代わりに JavaScript イベント リスナーを使用することです (これは、JavaScript と JScript が異なる状況の 1 つであるため、対応する Jscript の attachEvent と共に)。これを最も簡単に行うには、最初に addEvent 関数を作成します。この関数は、実行中の言語がサポートする 2 つのイベント リスナーまたは添付ファイルのいずれかを追加します。
|_+_|要素がクリックされたときに発生させたい処理を次のようにアタッチできます。
|_+_|要素がクリックされたときに処理されるコードをアタッチするこのメソッドを使用すると、特定の要素がクリックされたときに実行される別の関数を追加する別の addEvent 呼び出しを行うことは、前の処理を新しい処理に置き換えるのではなく、代わりに許可することを意味します。両方の機能が実行されます。 addEvent を呼び出すときに、要素がクリックされたときに実行する関数が要素にアタッチされているかどうかを知る必要はありません。新しい関数は、以前にアタッチされた関数と一緒に実行されます。
要素がクリックされたときに実行されるものから関数を削除する機能が必要な場合は、対応する deleteEvent 関数を作成して、イベント リスナーまたは添付イベントを削除するための適切な関数を呼び出すことができますか?
処理をアタッチするこの最後の方法の 1 つの欠点は、非常に古いブラウザーが、イベント処理を Web ページにアタッチするこれらの比較的新しい方法をサポートしていないことです。膨大な数のエラー メッセージが表示されないようにコードを記述することは別として、J(ava)Script を記述する際にそのような時代遅れのブラウザを無視する人は、今ではほとんどいないはずです。上記の関数は、使用する方法のいずれもサポートされていない場合は何もしないように記述されています。これらの非常に古いブラウザのほとんどは、HTML を参照する getElementById メソッドもサポートしていません。 if (!document.getElementById) は false を返します。 そのような呼び出しを行う関数の上部にも適切です。もちろん、JavaScript を書いている人の多くは、古いブラウザーをまだ使用している人たちに配慮していません。そのため、それらのユーザーは、アクセスするほとんどすべての Web ページで JavaScript エラーが表示されることに慣れているに違いありません。
訪問者が何かをクリックしたときに実行される処理をページに追加するために使用するさまざまな方法はどれですか?あなたのやり方が、ページの下部にある例よりもページの上部にある例に近い場合は、onclick 処理の記述方法を改善して、より優れた方法の 1 つを使用することを検討する時期かもしれません。ページの下部に表示されます。
クロスブラウザー イベント リスナーのコードを見ると、呼び出した 4 番目のパラメーターがあることがわかります。 UC 、その使用は前の説明から明らかではありません。
ブラウザーには、イベントがトリガーされたときにイベントを処理できる 2 つの異なる順序があります。タグからイベントをトリガーしたタグに向かって外側から内側に向かって作業することも、最も具体的なタグから始めて内側から外側に向かって作業することもできます。この2つを呼びます 捕獲 と バブル ほとんどのブラウザーでは、この追加パラメーターを設定することで、複数の処理を実行する順序を選択できます。
- uC = キャプチャ フェーズ中に処理する場合は true
- uC = バブル フェーズ中に処理する場合は false。
そのため、キャプチャ フェーズでイベントがトリガーされたタグの周りにラップされた他のタグがいくつかある場合は、最初に最も外側のタグから開始し、イベントをトリガーしたタグに向かって移動し、イベントが関連付けられたタグが処理されると実行されます。バブル段階ではプロセスが逆になり、再び元に戻ります。
Internet Explorer と従来のイベント ハンドラーは、常にバブル フェーズを処理し、キャプチャ フェーズを処理しないため、常に最も具体的なタグから開始して外側に向かって処理します。
したがって、イベント ハンドラーでは次のようになります。
|_+_|をクリックして xx 最初に alert('b') をトリガーし、次に alert('a') をトリガーしてバブルアウトします。
これらのアラートが、uC が true のイベント リスナーを使用して添付された場合、Internet Explorer を除くすべての最新のブラウザーは、最初にアラート ('a') を処理し、次にアラート ('b') を処理します。