- PR -

IE7 での Ctrl+ボタン押下の検出方法

投稿者投稿内容
さね
会議室デビュー日: 2009/03/30
投稿数: 6
投稿日時: 2009-03-31 14:22
引用:
そもそも、JavaScript のエキスパートではないあなたが、裏付けもせずに IE のバグだと断定することがお門違いです。


すみません、、確かにおっしゃるとおりです。

FireFox、NN、Opera でイベントが拾えたのに、
IEでは拾えないからバグだー!!!…とさわいでいましたが、
onclick イベントがどのタイミングで発生するかなんて
確かにブラウザの仕様次第なんですよね。。

今まで散々IEのバグに泣かされてきたので
こういう発言になってしまいました、すみません。
具体的にはこれまで仕事の中で10件くらいのIEバグを
見つけたことがあり、Microsoftに依頼して
専用の修正パッチを提供してもらったこともありました。

…以後発言に気をつけます m(__)m..
貴重な時間を割いていただいてすみませんでした。


[ メッセージ編集済み 編集者: さね 編集日時 2009-03-31 14:39 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2009-03-31 14:48
遅くなってごめんなさい、類似するものがなかったので、登録しました。
https://connect.microsoft.com/IE/feedback/ViewFeedback.aspx?FeedbackID=428391

検証、レーティング、回避策(デューンさんの方法)の登録をお願いします。
今のところ「バグ」となっていますが、「by design」でクローズする可能性は大いにあります。「今のままだと、こんな時に大いに困る」というのを、「コメント」のところに“英語で”書き込んでおくと、「by design」であっても修正の対象になる可能性が上がります。
satomi
会議室デビュー日: 2008/06/11
投稿数: 12
投稿日時: 2009-03-31 15:07
jQueryを使ってやってみました。

default.js
コード:
document.write('<script type="text/javascript" src="js/jquery-1.2.6.min.js"></script>'); 
document.write('<script type="text/javascript" src="js/foo.js"></script>'); 


素直に全画面修正してjQueryのライブラリを読み込ませても良いんですが、
弄りたくなかったらこういう手もあります。


foo.js
コード:
$(function() {
	$("a").each(function() {
		$(this).data("href", $(this).attr("href"));
		$(this).attr("href", "#");
	});
	
	$("a").click(function(){
	  if($(this).data("href")) {
	    location.href=$(this).data("href");
	  }
	  return false;
	});
});


最初に遷移先のURLを退避してから#に置き換えます。
クリックイベントで退避したURLがあったら遷移します。
return falseで元のイベントをキャンセルします。


bar.html
コード:
<html>
	<head>
		<script type="text/javascript" src="js/foo.js"></script>
	</head>
	<body>
		<a href="http://www.google.co.jp/">google</a><br>
		<a href="http://www.yahoo.co.jp/">yahoo</a>
	</body>
</html>



Ctrl+Clickしてみて下さい。
さね
会議室デビュー日: 2009/03/30
投稿数: 6
投稿日時: 2009-03-31 18:11
>Jittaさま
わざわざありがとうございます、すばらしいです。
こんなフィードバックページがあるとは、知りませんでした。

これで直る/直らない何れにしろ、IEの開発者に現象の
存在を知ってもらうことは出来るわけですね。

後でコメントに、どれだけ困るかを追記しておこうと思います。
頑張って英語書かなきゃ(汗)


>satomiさま
おぉぉ。すばらしいです!
これは完全な回避策になりそうです。

早速試してみましたがちゃんとイベントキャンセルされて
タブが開かずに自分自身を書き換えることに成功しました。

jQuery や ExtJS などのライブラリを利用すると、
案外簡単に回避できるものなんですかね。凄いです。

…と、ここまで書いて、でも jQuery でも、実際やっていることは
一緒だよなぁ…と思ってコードを少し読んでみたのですが、
obj.attachEvent(); などをやっているだけだし、何で jQuery だと
onclickイベントが取れるんだろう??
と思ったら、以下のようなミソがありました。

イベント飛ぶ:  ○ <a href="#" onclick="alert('click!')">aaa</a>
イベント飛ばない:× <a href="http://www.yahoo.co.jp" onclick="alert('click!')">aaa</a>

何と、自分自身に飛ぶ hrefの場合はちゃんと onclick イベントも
飛ぶし、イベントキャンセルも出来るのでした。

…というわけで、当面の回避策としては
<a href="#" ... の形で書いておいて、
onclick イベントで location.href を自分で書き換えるという方法でしょうか。
#jQuery を使うと、上記変更すら必要ないので
 今回はこっちを適用しようと思っています!

みなさま、お忙しいところ返信誠にありがとうございました m(__)m..

後はフィードバックページで、IEの仕様変更が
入ってくれることを祈りつつコメントに追記する感じですね。
重ねて、ありがとうございました m(__)m
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2009-03-31 23:32
引用:

さねさんの書き込み (2009-03-31 14:22) より:

FireFox、NN、Opera でイベントが拾えたのに、
IEでは拾えないからバグだー!!!…とさわいでいましたが、


おお、そこまで確認していたのですか。それは失礼しました。
であれば「IE の独自仕様か、もしくはバグである可能性が高い」という説明をすれば十分ではないでしょうか。
# 本当にバグなのかどうかは、さねさん(やお客さん)にとっては重要ではないと思うし

スキルアップ/キャリアアップ(JOB@IT)