• ベストアンサー

Javascriptで通常の文字リンクを作りたい?

GetHTMLW ​http://www.vector.co.jp/soft/win95/net/se077067.html​ などのホームページデータ ダウンロード ソフトで、ホームページのデータを丸ごとコピーされないように、 ホームページ内のリンクをJavascriptにしたいのですが、自分が書いたコードがちゃんと動作しません。どこが悪いのでしょうか? 動作やカラーの反転は、できるだけ通常のアンカータグを使用したHTMLリンクのようにしたいです。 2種類のコードを書きました: 1つ目: <a href="JavaScript:location='../jtest/page_b.html';">ページBへ</a> 2つ目: <a href="javascript:;" onClick="location='../jtest/page_b.html';">ページBへ</a> 上記よりもっとよい書き方をご存知でしたら、お教え願えれば幸いです。 リンクをJavascriptにすると検索エンジンにも引っかからないそうですが、知人しか見ないサイトなので、そちらは問題ありません。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • auty
  • ベストアンサー率58% (284/486)
回答No.5

・ 返事が遅くなり申し訳ありません。 >>> 2つ目のコードに「return false;」がなぜ必要か このことの関して、簡単に述べてみます。 ・ 「return false;」には、「デフォルトの動作」を抑止するという働きがあります。 ・ 「デフォルトの動作」とは、この場合、<a>タグをクリックしたときに行われる動作です。すなわち、hef属性に登録されている、URLへのジャンプまたはJavaScriptの実行と言う事になります。 ・ ここに、onclick属性のJavaScriptが加わるとまずこちらが実行され、つぎに「デフォルトの動作」に指定されたJavaScriptも実行されるということです。 ・ ただし、onclick属性のJavaScriptが falseを返すとこの「デフォルトの動作」は抑止されることになります。 ・ また href="javascript:;" や href="javascript:void(0);" は、実行されても実際には何も行わない動作ですから無害なわけです。この場合、抑止しなくても同じ事となるわけです。 ・ また、<form>タグのサブミット機能をご存知じかと思いますが、このonclick属性のJavaScriptで入力文字をチェックして、サブミットを抑止したいときも同様に、 return false; で解決するわけです。

kitty1000
質問者

補足

autyさん ご回答、ありがとうございました。 >・ また >href="javascript:;" >や >href="javascript:void(0);" >は、実行されても実際には何も行わない動作ですから無害なわけで >す。この場合、抑止しなくても同じ事となるわけです。 それでは、 <a href="#" onClick="location.href='../jtest/page_b.html';return false;">ページBへ</a> は、 <a href="#" onClick="location.href='../jtest/page_b.html';">ページBへ</a> でもよい(同じこと)のですか?

その他の回答 (5)

  • auty
  • ベストアンサー率58% (284/486)
回答No.6

・ とりあえず、前回の最後の方にあるonclick属性は、onsubmit属性に訂正します。 ・ さて、ご質問に関してですが、あくまでも <a href="#" onClick="location.href='../jtest/page_b.html';">ページBへ</a> の方は、href="#"の部分が実行されるということです。 その違いを確認するのは、かなり面倒だということがやってみればすぐに分かります。 target属性を使って、元のWindowのURLを確認すると、Firefoxの場合は、URLの最後に#が付きましたが、IEの場合は、return false;を付けるとtarget属性が働きませんでした。 この辺りは、ブラウザによって微妙に動作が異なるようです。 以下のURLの「追記2」の部分で違いが確認できるので、もし興味があればごらんください。 http://www.machu.jp/diary/20070731-1.html ・ 結論として、状況によって同じように見える場合もあるけれど、あくまでも   「デフォルトの動作」が実行されるかされないかの違いはあるということになります。

kitty1000
質問者

補足

autyさん ご回答、ありがとうございました。 了解しました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

>または、ホームページデータ ダウンロード ソフトで、 >ホームページのデータを丸ごとコピーされないようにするためには、 >単に<a href="javascript:location='../jtest/page_b.html';">ページBへ</a> >でも効果は期待で来るのでしょうか? 結論:リンク先が書いてあるのだから、何をやっても無駄 もちろん今回指摘の方法で、大なり小なり効果はありますが、 所詮ブラウザで追跡できるリンク先は、ちょっとしたクローラなら 追いかけることができるんじゃないかなぁ・・・ 効果をあげたいならセッション管理とかクッキーをつかうとか、もっと 本質的な処理が必要でしょう。 もちろんそれでも偽装される可能性はありますけどね・・・

kitty1000
質問者

お礼

yambejpさん ご回答、ありがとうございました。 了解しました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

>ホームページのデータを丸ごとコピーされないように、 という時点で、なぜ公開しているのかが理解できません。 いっそオープンに公開せず、パスワードでもかけて管理した方が よいのではないでしょうか? >1つ目のコードには、 ><a href="JavaScript:location.href='../jtest/page_b.html';return false;">ページBへ</a> >などのように「return false;」は必要ないのですか? 必要ありません。 なぜなら、javascriptが有効である前提のコードだからです。 仮にjavascriptが無効になっていた場合エラーになりますが return falseをつけてもエラーは回避できませんのでつける意味がありません。 >2つ目のコードに「return false;」がなぜ必要かもわかっていません。 location.hrefでページが切り替わってしまうので 今回の場合にかぎっては厳密にいえば、必要ないかもしれません。 たとえばtargetを指定したり、フレームを使っていたりする場合は return falseしておくとアンカーとしての機能が発動しないため ページの先頭にもどってしまうのを防ぐことができます。 まぁおまじないみたいなものだと思ってください。 >2つ目のコードでhref="javascript:;" をhref="#"に変更されたのは、 >なぜですか?href="#"にすると、リンクをクリックしたときに画面が >動いてしまいますが。 hrefに指定された#はハッシュといって、HTMLのルールとしては正しい ものです。 一方href="javascript:;"という書式は不完全なものなのでお勧めできません。 結局javascriptが無効な場合にはエラーになってしまいます。 なのでjavascriptが無効な場合にエラーを出さないためこのようなやり方 を するのが一般的な作法となっています。 もっときちんと書くなら <script type="text/javascript"><!-- document.write('<a href="javascript:location=\'../jtest/page_b.html\'">ページBへ</a>'); // --> </script> <noscript> javascriptでページBへとびます </noscript> のようにjavascriptで飛び先をかく必要があるでしょうね

kitty1000
質問者

補足

yambejpさん ご回答、ありがとうございました。 >いっそオープンに公開せず、パスワードでもかけて管理した方が >よいのではないでしょうか? このホームページには、.htaccessでパスワードをかけています。知人しか見ないもので。ただ、パスワードを知っている人は中に入れるのでホームページ全体をダウンロードできます。それを防ぎたいのですが。 >もっときちんと書くなら とは、ホームページデータ ダウンロード ソフトで、ホームページのデータを丸ごとコピーされないようにするためには、yambejpさんがおっしゃるように「javascriptで飛び先をかく必要がある」ということですか?  または、ホームページデータ ダウンロード ソフトで、ホームページのデータを丸ごとコピーされないようにするためには、単に<a href="javascript:location='../jtest/page_b.html';">ページBへ</a> でも効果は期待で来るのでしょうか? よろしくお願いします。

  • VCAT
  • ベストアンサー率20% (16/79)
回答No.2

ヨコから失礼。 No1の方が2つ書いたのは2通りあるという意味でしょう。上の方の <a href="JavaScript:location.href='../jtest/page_b.html';">ページBへ</a> を2つとも使えばまったく問題ないです。

kitty1000
質問者

補足

VCATさん ご回答、ありがとうございました。 >No1の方が2つ書いたのは2通りあるという意味でしょう こちらの意図は、私にも伝わりました。 >上の方の ><a href="JavaScript:location.href='../jtest/page_b.html';">ペ >ージBへ</a> >を2つとも使えばまったく問題ないです。 ANO1さんの1つ目のコードで、ホームページデータ ダウンロード ソフトで、ホームページのデータを丸ごとコピーされないようになりますかね(又はされない可能性が高くなりますかね?)? よろしくお願いします。

  • auty
  • ベストアンサー率58% (284/486)
回答No.1

1つ目: <a href="JavaScript:location.href='../jtest/page_b.html';">ページBへ</a> 2つ目: <a href="#" onClick="location.href='../jtest/page_b.html';return false;">ページBへ</a>

kitty1000
質問者

お礼

質問2に関して探していると以下のような種類があるようですが、何が違うのでしょうか? href="#" href="javascript:;" href="javascript:void(0);" href="#"は、リンクをクリックしたときに画面が動いてしまうデメリットがあるようですが...?

kitty1000
質問者

補足

autyさん ご回答、ありがとうございました。 ご質問1: 1つ目のコードには、 <a href="JavaScript:location.href='../jtest/page_b.html';return false;">ページBへ</a> などのように「return false;」は必要ないのですか? 2つ目のコードに「return false;」がなぜ必要かもわかっていません。 ご質問2: 2つ目のコードでhref="javascript:;" をhref="#"に変更されたのは、なぜですか?href="#"にすると、リンクをクリックしたときに画面が動いてしまいますが。 よろしくお願いします。

関連するQ&A