18

私は最近、できるだけ多くのJavaScriptコードを読むことで、JavaScriptのスキルを向上させるために一丸となって取り組んでいます。これを行う際javascript:に、HTML要素タグのイベントハンドラー属性の前にプレフィックスが追加されるのを時々見ました。このプレフィックスの目的は何ですか?基本的に、次の間にかなりの違いはありますか?

onchange="javascript: myFunction(this)"

onchange="myFunction(this)"

4

10 に答える 10

19

あなたの例ではおそらく何もありません。私の理解では、それjavascript:は(実際の代わりに)アンカータグ用hrefです。これを使用して、ユーザーがリンクをクリックしたときにスクリプトを実行できるようにしますが、ページに戻るナビゲーションを開始する必要はありません(空白hrefと組み合わせてonclick実行します)。

例えば:

<a href="javascript:someFunction();">Blah</a>

それよりも:

<a href="" onclick="someFunction();">Blah</a>
于 2008-08-22T19:12:17.213 に答える
13

イベント ハンドラーでは使用しないでください (ただし、ほとんどのブラウザーは防御的に動作し、ユーザーを罰することはありません)。また、アンカーの href 属性では使用しないでください。ブラウザが JavaScript をサポートしている場合、適切に定義されたイベント ハンドラが使用されます。ブラウザーがそうでない場合、javascript: リンクが壊れて表示されます。IMO、javascriptがその機能を使用できるようにする必要があることを説明するページ、またはJavaScriptを必要としない機能のバージョンを説明することをお勧めします。したがって、次のようなものです:

<a href="non-ajax.html" onclick="niftyAjax(); return false;">Ajax me</a>

編集: javascript: を使用する十分な理由を考えました。ブックマークレット。たとえば、これはページの RSS フィードを表示するために Google リーダーに送信します。

var b=document.body;
if(b&&!document.xmlVersion){
  void(z=document.createElement('script'));
  void(z.src='http://www.google.com/reader/ui/subscribe-bookmarklet.js');
  void(b.appendChild(z));
}else{
  location='http://www.google.com/reader/view/feed/'+encodeURIComponent(location.href)
}

ユーザーがこのブックマークレットを簡単に追加できるようにするには、次のようにフォーマットします。

<a href="javascript:var%20b=document.body;if(b&&!document.xmlVersion){void(z=document.createElement('script'));void(z.src='http://www.google.com/reader/ui/subscribe-bookmarklet.js');void(b.appendChild(z));}else{location='http://www.google.com/reader/view/feed/'+encodeURIComponent(location.href)}">Drag this to your bookmarks, or right click and bookmark it!</a>
于 2008-08-22T19:20:02.500 に答える
5

href タグでのみ使用する必要があります。

それはばかげている。

受け入れられる方法は次のとおりです。

<a href="/non-js-version/" onclick="someFunction(); return false">Blah</a>

しかし、OPに答えるために、通常、もう使用する理由はありjavascript:ません。実際、マークアップにインラインではなく、スクリプトから JavaScript イベントを添付する必要があります。しかし、それは私が思う純粋主義的なことです:-D

于 2008-08-22T19:19:31.800 に答える
2

イベント ハンドラーの起源はjavascript:、実際には IE 固有のものであるため、ハンドラーに加えて言語を指定できます。これはvbscript、IE でサポートされているクライアント側スクリプト言語でもあるためです。「vbscript:」の例を次に示します。

他のブラウザでは (Shadow2531 が言ったように)javascript:は単なるラベルであり、基本的に無視されます。

href="javascript:..."DannySmurf が指摘しているように、リンクで使用して JavaScript コードを実行できます。

于 2008-08-28T13:07:28.273 に答える
1

私はJavaScriptの権威ではなく、おそらく質問者よりも劣等生ですが、私の知る限り、違いはjavascript:URIコンテキストでプレフィックスが優先/必須であり、引数がJavaScriptトリガーと同様に従来のHTTP URLである可能性があることです.

したがって、私の直感的な答えは、onChangeJavaScript を想定しているため、javascript:接頭辞は冗長であるということです (完全に誤りではないにしても)。javascript:myFunction(this)ただし、アドレス バーに書き込みを行うと、その機能が実行されます。がないとjavascript:、ブラウザはmyFunction(this)URL として解釈しようとし、DNS 情報を取得しようとしたり、そのサーバーを参照したりします...

于 2008-08-22T19:17:53.583 に答える
1

javascript: JS コード (onclick 属性のように) は、continue/goto ラベル ステートメントで使用する単なるラベルであり、ブラウザーでサポートされている場合とサポートされていない場合があります (おそらくどこにもありません)。代わりに、zipzambam: である可能性があります。ラベルを使用できない場合でも、ブラウザはそれを受け入れるため、エラーは発生しません。

これは、誰かが onclick 属性に役に立たないラベルを投げている場合、彼らはおそらく自分が何をしているのかわからず、単にコピーして貼り付けているか、以下のことから習慣からそれを行っていることを意味します。

javascript: href 属性の Javascript URI を示します。

javascript:(function()%7Balert(%22test%22)%3B%7D)()%3B
于 2008-08-22T20:01:21.747 に答える
0

@マキューシオ

それはばかげている。

いいえ、ばかげているわけではありません。javascript: は実際にはリンクのサブジェクトとしてのみ使用できる疑似プロトコルであるため、彼はまったく正しいです。あなたの提案は確かに優れていますが、jQuery などのライブラリで使用されているように、目立たない JavaScript 手法を使用して HTML 要素を反復処理し、プログラムで動作を追加することをお勧めします。

于 2008-08-22T20:13:33.043 に答える
0

フラバ:

Firefox やその他のブラウザでのjavascript:in HREFbreak の「新しいウィンドウで開く」と「新しいタブで開く」の使用。

「間違っている」わけではありませんが、サイトをナビゲートしにくくしたい場合は...

于 2008-09-04T01:28:00.350 に答える
0

javascript:接頭辞が属性内で何かを意味するかどうかはわかりませんがonevent、リンクを新しいタブで開こうとするとアンカータグで迷惑になることはわかっています. はhrefフォールバックとして使用し、javascript をリンクに添付しないでください。

于 2008-08-22T19:18:22.240 に答える
0

基本的に、 と の間にかなりの違いはありonchange="javascript: myFunction(this)"ますonchange="myFunction(this)"か?

特にJavaScriptを使用してコンテンツをロードする場合は href="javascript: myFunction(this)"、そうです。javascript: 疑似プロトコルを使用すると、一部の人間とすべての検索エンジンがコンテンツにアクセスできなくなりますが、実際の href を使用し、javascript を使用してリンクの動作を変更すると、javascript がオフになっているか、特定のクライアントで使用できない場合に、コンテンツにアクセスできるようになります。

于 2008-08-22T20:55:32.333 に答える