【JQuery】iframe内をタップしたらイベントを発火させる

この記事について

環境jQuery + iframe(iPhone safari)
目的iframe内のタップでイベントを発火させる
結果contents().find() で iframe 内の要素にイベントを付ける

つまずきポイント要約

  • iframe要素自体にはタッチ・クリックイベントが発行されない
  • iPhoneのsafariは body に付けた click が無効。div などに付ける

sample.html

<!DOCTYPE HTML>
<html> 

 <head> 
 <script src="js/jquery-1.9.1.min.js" type="text/javascript"></script> 
 <script src="js/test.js" type="text/javascript"></script> 
 </head>
 <body>
 <iframe src="iframe_test.html" id="iframe"></iframe> 
 </body>
</html>

iframe_test.html

<html>
<head>
</head>
<body>
<div>
インラインフレームの内容
</div>
</body>
</html>

test.js

//iframeの内容が完全に読み込まれたら
$(window).on("load", function(e){
	//iframeにはタッチやクリックイベントは発行されないためこういう記述
	$("#iframe").contents().find("body").on("touchstart", function(e){
		alert("タップされた");
	});
});

参考ページ1 
参考ページ2

ただ、これだとiPhoneのsafariだと「click」うまく動作しない。「touchstart」なら動く。理由はこれだと思う。
iPhoneのsafariだとbody要素に登録したclickは無効なのでdivなどに登録先を変える。

$("#iframe").contents().find("body").on("click", function(e){
	alert("タップされた");
});

↓↓↓↓↓↓↓↓↓

$("#iframe").contents().find("div").on("click", function(e){
	alert("タップされた");
});

iframe内の部品がクリックされたイベントを起こす場合は↓

■sample.html

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <title>Test</title>
 <script type="text/javascript" src="jquery-1.4.1.min.js"></script>
 <script type="text/javascript">
 $(window).load(function() {
$("#hoge").contents().find("#fuga").bind("click", function() {
 alert("hogehoge");
 });
 })
 </script>
 <iframe id="hoge" src="hoge.html"></iframe>

■hoge.html

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <title>hoge.html</title>
 <button id="fuga">PUSH!!</button>

参考:http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1036893315

タイトルとURLをコピーしました