• ベストアンサー

JavaScriptを実行するリンクで、「対象をファイルに保存」を実行した時のエラーを回避する方法

お世話になります。 <a href="javascript:alert('Hello!!')">Click Me</a> とすると、リンクを右クリックで「対象をファイルに保存」が選択できてしまいます。選択すると「・・・ダウンロードできません」などのエラーメッセージが表示されてしまいます。ユーザーが不具合と判断する恐れがあるため、このエラーメッセージが表示されないする方法を考えています。 外観を変えずに、この問題を回避する方法はないでしょうか。 ボタンやラベルに変更すれば、回避できることは承知しています。

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

  • ベストアンサー
回答No.4

>外観を変えずに JavaScript や CSS を駆使すれば、ある程度は対処可能ですが、どこかしら無理が生じます。 そもそも何故、JavaScriptの実行をリンクで行うのか・・・。 閲覧者にリンクとして表現しているのだから、右クリックで「対象をファイルに保存」をされればエラーを伝えるのは逆に必要でしょう。 そもそも「リンク」として閲覧者に表現しているのだから・・・。 <a href="#" onclick="alert('Hello!!')">Click Me</a> 一番外観がかわらなそうな対処です。しかしページのトップへ位置づけは代わります。(スクロールします。) 尚、読み込みはされません。 <a href="#" onclick="alert('Hello!!'); return false;">Click Me</a> 先の改訂版です。JavaScriptが有効であれば「href="#"」は無視されます。ただしブラウザ側がJavaScript無効の場合、ページのトップに位置づけされます。 <span style="color:red;text-decoration: underline" onclick="alert('Hello!!')">Click Me</span> JavaScript と CSS の駆使です。マウスポインターや色なども気になるのでしたら、更に onmouseover や onmouseout にて style を更新したりマウスポインターを制御すれば良い事・・・。 まぁ欠点は、JavaScript や CSS が無効の場合は当然希望通りにはならないと・・・。 動作のトリガーをリンクとして表現(外観)している事が不適切で、そこを変更するのが容易な対処法と想います。

ryusei2
質問者

お礼

> そもそも「リンク」として閲覧者に表現しているのだから・・・。 > 動作のトリガーをリンクとして表現(外観)している事が不適切で、そこを変更するのが容易な対処法と想います。 もっともだと思いますし、私の同様の考えを持っていました。ただ、私が決めた仕様ではないし、開発元が仕様変更なるなどといって、簡単には概観を変えられないのです。しかし、今回はあきらめて、ボタンかspanにする方向で考えるしかないと思っています。

すると、全ての回答が全文表示されます。

その他の回答 (5)

noname#19206
noname#19206
回答No.6

javascript:のリンクの処理はブラウザによって異なります。 リンク先を保存するメニューが出ないものもあれば、 javascriptのURLというものが保存できないものだと警告するものも。 これは利用者の環境に依存する問題だし、もしWebサイトのユーザーが保存を試みるのを警戒するのであれば、 どこかに注意書きでもかいておいたほうがいいのではないでしょうか。

ryusei2
質問者

お礼

> javascript:のリンクの処理はブラウザによって異なります。 それはわかっています。FireFox(私は愛用しています)では、JavaScripを実行するリンクの場合右クリックしても「名前を付けてリンク先を保存」が表示されないようになっています。IEもこうなってほしいものです。今回のシステムはIE限定となっています。 > どこかに注意書きでもかいておいたほうがいいのではないでしょうか。 私もそう思います。それが簡単だし、無難かもしれませんね。 邪道ですが、次のようにすると、理想に近くなります。 <a href="mailto:xyz@xxx.yyy.zzz" onclick="alert('hello!!');return false;">Click Me</a> 右クリックしても、「対象をファイルに保存」選択できません。 個人のページならこのようにしてもいいと思いますが、大規模な基幹業務のシステムですので、このやり方を提案することはできないと考えています。

すると、全ての回答が全文表示されます。
noname#19175
noname#19175
回答No.5

結局、このリンク部分を「対象をファイルに保存」で保存しようとしたときに どんなファイルが保存されればいいのでしょうか? といっても、「保存する」という操作をしているのに何も保存できなければ、それこそ不具合だと思います。 「対象をファイルに保存」を選択したときだけ実行されるスクリプトが出来ればいいのですが、それはブラウザの仕様上できませんしね。 > 右クリックできないようにすると、「ほかの部分に支障が出る」などの話になる可能性がありますので 右クリックの処理をしているなら、 その関数内で<a>がクリックされたかどうかを調べて、コンテクストメニューを出さないようにすればよいと思いますが、 それではダメでしょうか? もしくは、 <a href="#" onclick="alert('hello!!');return false;" oncontextmenu="alert('not allowed');return false;">Click Me</a> document内のほかの部分は右クリック可能で、該当の<a>のみ右クリック不可にするだけで良いなら簡単にできます。 (ブラウザの設定に依存しますが、IE5.5以上限定に出来るならこれで大丈夫でしょう)

ryusei2
質問者

お礼

> 何も保存できなければ、それこそ不具合だと思います。 私もそう思います。 特に右クリックで特別なことをしているわけではないので、回答者様やNo1.の回答で特に問題ないと思いますが、問題ないことを実証しなければならないのです。 今回はボタンなどにすることが妥当と考えています。 ありがとうございました。

すると、全ての回答が全文表示されます。
noname#20378
noname#20378
回答No.3

>色など、外観がやや違ってきますね。 それはNo2の方がcolor:red;を適用しているためで、いくらでも変更可能です >マウスポインターや CSS2にはcursorというプロパティが存在しますのでこれを使うことでマウスポインタの形状は自由に指定できます #実装されているかの保証しない

ryusei2
質問者

お礼

> それはNo2の方がcolor:red;を適用しているためで、いくらでも変更可能です それは解っていますが、リンクと全く同じにすることはできないですよね。履歴があるかどうかなど。 > CSS2にはcursorというプロパティが存在しますのでこれを使うことでマウスポインタの形状は自由に指定できます 少し、話が大きくなるため、今回は非現実的です。 わがまま言ってすみません。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

トリガーにアンカー(a)をつかう限り、完璧な 解決策はありません。昔からよくこんな風に 対処をされてきました <a href="#" onclick="alert('Hello!!')">Click Me</a> とりあえず、見た目さえあってればいいならspanで 代用してもいいでしょう。 <span style="color:red;text-decoration: underline" onclick="alert('Hello!!')">Click Me</span>

ryusei2
質問者

お礼

> <a href="#" onclick="alert('Hello!!')">Click Me</a> 現在のhtmlがダウンロードされるわけですね。 <span style="color:red;text-decoration: underline" onclick="alert('Hello!!')">Click Me</span> マウスポインターや色など、外観がやや違ってきますね。 > 完璧な解決策はありません。 どこかで妥協するしかないようですね。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • X-trail_00
  • ベストアンサー率30% (438/1430)
回答No.1

aタグの中に oncontextmenu='return false;' と記入すると右クリックしてもメニューが表示されません

ryusei2
質問者

お礼

確認しました。確かに、右クリックしてもメニューが表示されません。 ありがとうございます。 右クリックできないようにすると、「ほかの部分に支障が出る」などの話になる可能性がありますので、ほかに回避策はないでしょうか。

すると、全ての回答が全文表示されます。

関連するQ&A