お世話になります。
<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 が無効の場合は当然希望通りにはならないと・・・。
動作のトリガーをリンクとして表現(外観)している事が不適切で、そこを変更するのが容易な対処法と想います。
> そもそも「リンク」として閲覧者に表現しているのだから・・・。
> 動作のトリガーをリンクとして表現(外観)している事が不適切で、そこを変更するのが容易な対処法と想います。
もっともだと思いますし、私の同様の考えを持っていました。ただ、私が決めた仕様ではないし、開発元が仕様変更なるなどといって、簡単には概観を変えられないのです。しかし、今回はあきらめて、ボタンかspanにする方向で考えるしかないと思っています。
No.6
- 回答日時:
javascript:のリンクの処理はブラウザによって異なります。
リンク先を保存するメニューが出ないものもあれば、
javascriptのURLというものが保存できないものだと警告するものも。
これは利用者の環境に依存する問題だし、もしWebサイトのユーザーが保存を試みるのを警戒するのであれば、
どこかに注意書きでもかいておいたほうがいいのではないでしょうか。
> javascript:のリンクの処理はブラウザによって異なります。
それはわかっています。FireFox(私は愛用しています)では、JavaScripを実行するリンクの場合右クリックしても「名前を付けてリンク先を保存」が表示されないようになっています。IEもこうなってほしいものです。今回のシステムはIE限定となっています。
> どこかに注意書きでもかいておいたほうがいいのではないでしょうか。
私もそう思います。それが簡単だし、無難かもしれませんね。
邪道ですが、次のようにすると、理想に近くなります。
<a href="mailto:xyz@xxx.yyy.zzz" onclick="alert('hello!!');return false;">Click Me</a>
右クリックしても、「対象をファイルに保存」選択できません。
個人のページならこのようにしてもいいと思いますが、大規模な基幹業務のシステムですので、このやり方を提案することはできないと考えています。
No.5
- 回答日時:
結局、このリンク部分を「対象をファイルに保存」で保存しようとしたときに
どんなファイルが保存されればいいのでしょうか?
といっても、「保存する」という操作をしているのに何も保存できなければ、それこそ不具合だと思います。
「対象をファイルに保存」を選択したときだけ実行されるスクリプトが出来ればいいのですが、それはブラウザの仕様上できませんしね。
> 右クリックできないようにすると、「ほかの部分に支障が出る」などの話になる可能性がありますので
右クリックの処理をしているなら、
その関数内で<a>がクリックされたかどうかを調べて、コンテクストメニューを出さないようにすればよいと思いますが、
それではダメでしょうか?
もしくは、
<a href="#" onclick="alert('hello!!');return false;" oncontextmenu="alert('not allowed');return false;">Click Me</a>
document内のほかの部分は右クリック可能で、該当の<a>のみ右クリック不可にするだけで良いなら簡単にできます。
(ブラウザの設定に依存しますが、IE5.5以上限定に出来るならこれで大丈夫でしょう)
> 何も保存できなければ、それこそ不具合だと思います。
私もそう思います。
特に右クリックで特別なことをしているわけではないので、回答者様やNo1.の回答で特に問題ないと思いますが、問題ないことを実証しなければならないのです。
今回はボタンなどにすることが妥当と考えています。
ありがとうございました。
No.3
- 回答日時:
>色など、外観がやや違ってきますね。
それはNo2の方がcolor:red;を適用しているためで、いくらでも変更可能です
>マウスポインターや
CSS2にはcursorというプロパティが存在しますのでこれを使うことでマウスポインタの形状は自由に指定できます
#実装されているかの保証しない
> それはNo2の方がcolor:red;を適用しているためで、いくらでも変更可能です
それは解っていますが、リンクと全く同じにすることはできないですよね。履歴があるかどうかなど。
> CSS2にはcursorというプロパティが存在しますのでこれを使うことでマウスポインタの形状は自由に指定できます
少し、話が大きくなるため、今回は非現実的です。
わがまま言ってすみません。
ありがとうございました。
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>
> <a href="#" onclick="alert('Hello!!')">Click Me</a>
現在のhtmlがダウンロードされるわけですね。
<span style="color:red;text-decoration: underline" onclick="alert('Hello!!')">Click Me</span>
マウスポインターや色など、外観がやや違ってきますね。
> 完璧な解決策はありません。
どこかで妥協するしかないようですね。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- MySQL MySQL,JavaScript,PHPコードの結果を表示する方法を教えてください。 1 2023/02/13 17:49
- Excel(エクセル) 【マクロ】エラーが発生⇒実行時エラー58既に同名のファイルが存在 5 2022/08/31 10:03
- その他(Microsoft Office) ワードのマクロについて教えてください。 1 2023/01/21 16:01
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- Excel(エクセル) [クイックアクセスツールバー]の設定ファイルの格納場所について、 5 2023/04/21 14:43
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- オープンソース Excelファイルをデバッグしたい 4 2022/09/15 10:16
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
読み取り専用ファイルを上書き...
-
印刷と保存の仕方をVBAマクロの...
-
Excel VBAでほかのアプリケーシ...
-
Corel Digital Studioの動画をS...
-
VB.NETでEXCELファイルを開き、...
-
webページの特定の部分だけ消し...
-
CImageのファイル名を指定して保存
-
VBAで、強制保存してブックを閉...
-
PHPで自動的にWEBページを保存...
-
タイトルバーやメニューバーの...
-
EclipseでJavaScriptファイルの...
-
エクセルで「名前を付けて保存...
-
コマンドプロンプトでデスクト...
-
ExcelVBAでテキスト保存
-
JScript 中の日本語とエンコー...
-
Excel VBAで指定日しか保存でき...
-
VBScriptで日本語が変です
-
onedriveで同期解除をしたら、...
-
vlan internal allocation poli...
-
沢山のフォルダにあるファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
読み取り専用ファイルを上書き...
-
Excel VBAでほかのアプリケーシ...
-
Corel Digital Studioの動画をS...
-
コマンドプロンプトでデスクト...
-
Excel VBAで作成したマクロをxl...
-
エクセルで「名前を付けて保存...
-
ExcelVBAでデスクトップのPATH...
-
VBA メモ帳の上書き保存がしたい
-
VBAで、強制保存してブックを閉...
-
irvineを利用してVBAからダウン...
-
VBScriptでのSaveAsについて
-
webページの特定の部分だけ消し...
-
VBScriptで日本語が変です
-
Pivot table で集計されたデー...
-
AccessVBAでレポートをPDFで出力
-
vbaでIEの名前を付けて保存(A)...
-
エクセル:マクロ:保存時に連...
-
ファイルのダウンロード保存先...
-
htmlから取り込んだ を消...
-
VBAでPDF作成をしたあと、指定...
おすすめ情報