- ベストアンサー
IE8 アクティブタブの取得方法と非同期リクエストのタイミング
- WIN8.1のIE11でIE8をエミュレートして開発しています。現在IEウィンドウタブのアクティブ/非アクティブ状態を取得したいと思います。タブブラウザで複数のページを表示して切り替えた場合に、仕込んだイベントが発生する予定ですが、同一ウィンドウ内でのフォーカス移動でもonblurが発生しています。
- アクティブタブの取得方法や、タイミングのイベントの取得方法を教えてください。
- 最終目標は、カレントのタブのみ非同期リクエストを行い、非アクティブ時には内部フラグのみ更新し、アクティブになった瞬間に非同期リクエストの処理を呼び出すことです。
- みんなの回答 (4)
- 専門家の回答
関連するQ&A
- 開いたタブ(ウィンドウ)にフォーカスが当たらない
IE8 をタブモードで利用したとき、新しく開いた タブ(ウィンドウ)にフォーカスが当たりません。 JavaScript の window.open で別タブ(ウィンドウ)を 表示する処理を onload イベントで行うと、新しい タブ(ウィンドウ)にフォーカスがあたりません。 button のクリックイベントで表示した場合は、 新しいタブ(ウィンドウ)にフォーカスが当たります。 やりたいことは submit してページを再表示するときに 新しいタブ(ウィンドウ)を表示して、そちらにフォー カスを設定することです。 また、できればブラウザのバージョンによって処理を 切り替えるようなことはしたくありません。 何か原因や解決策などありましたらご教授ください。 よろしくお願いします。 <この現象が発生する環境> IE8 と IE7 で下記のように設定した場合 ツール → インターネットオプション → 全般タブ → タブ → 設定 → ポップアップの発生時 の設定を 「常に新しいタブでポップアップを開く」 にする。 ※IE9 ではこの現象は発生せず、新しいタブ(ウィンドウ)に フォーカスがあたります。 ※IE7, 8 でもタブモードではなく、別ウィンドウで開く 設定になっている場合は、新しいウィンドウにフォーカスが あたります。 <サンプルソースと説明> (説明) test1.html から window.open で test2.html を表示します。 onload で表示したときは test2.html のタブ(ウィンドウ)に フォーカスがあたりません。 button のクリックイベントで表示したときは test2.html の タブ(ウィンドウ)にフォーカスがあたります。 ---(test1.html)---------------------------------- <html> <head runat="server"> <title></title> <script language="javascript" type="text/javascript"> window.onload = function () { OpenWindowTest(); } function OpenWindowTest() { var TestWin = window.open('test2.html'); TestWin.document.focus(); } </script> </head> <body> <form> <div> <input type="button" value="button" onclick="OpenWindowTest();" /> <br /> <input type="submit" value="submit" /> </div> </form> </body> </html> --------------------------------------------------- ---(test2.html)---------------------------------- <html> <body onload="window.focus();"> テストページ </body> </html> ---------------------------------------------------
- 締切済み
- JavaScript
- window.openしたウィンドウのwindow.onblurについて
window.openしたウィンドウのonloadに window.onblur = function() { window.close(); } を設定しているのですがFirefox3.6、Opera10.51ではウィンドウからフォーカスが外れたらウィンドウが閉じるのですが(期待している動き通り)、 IE6のみwindow.openしたウィンドウをクリックしたと同時にウィンドウが閉じてしまいます。 どうすればIEでもFirefox,Operaと同じ動きをさせることが出来ますでしょうか・・・
- 締切済み
- JavaScript
- イベント発生順序
いつもお世話になっています。 JavaScriptの発生順序を制御する方法はありますでしょうか? 例えば、あるテキストボックスがあって、 A1→B2とフォーカスが移るときのイベントですが、 B2.onFocus→A2.onBlurの順番でイベントが発生していますが、これを A2.onBlur→B2.onFocusとしたいです。 IE限定でいいので、よろしくお願いします。
- 締切済み
- JavaScript
- フォーカス移動抑止について
お世話になっております。 ブラウザの画面項目(テキストボックス等)間でフォーカスを移動する場合、移動元でonblur、移動先でonfocusが発生しますが、移動元のonblurで、特定の条件の場合だけフォーカス移動を抑止し、移動先onfocusを発生させないようにしたいのですが、何か方法はないでしょうか? 【環境】 ・IE6 【現在うまくいっていない方法】 現在、フォーカス移動を抑止するため、移動元のonblur内の処理で、「event.srcElement.focus()」を実行してますが、移動先のonfocus()も走ってしまう。(2回フォーカス移動することで元の画面項目にフォーカスが戻る) 【補足】 ・問題になっているのは、画面項目のonblur、onfocusで入力値のチェックや他画面項目との連動、色変更、エラーメッセージ表示等を行っておりonblurやonfocusが何度も走ってしまうと想定外の動きをしてしまいます。(場合によってはフォーカス移動の無限ループ) ・グローバル変数を屈指すれば想定外の動きをしないようにすることはできるかと思いますが、それ以外の方法で制御したい。 【現在うまくいっていない方法の動作確認用のとりあえず作ったサンプルプログラム】 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>フォーカス遷移抑止検証</title> <script type="text/javascript"> var iEventCount = 0; function onElemBlur() { if (++iEventCount > 10) return true;// 無限ループ抑止用 debug("blur : " + event.srcElement.value); event.srcElement.focus(); } function onElemFocus() { if (++iEventCount > 10) return true;// 無限ループ抑止用 debug("focus : " + event.srcElement.value); } function debug(msg) { var obElem = document.getElementById("debugmsg"); obElem.innerHTML += msg + "<br/>"; } </script> </head> <body> <input type="text" value="hoge1" onblur="onElemBlur()" onfocus="onElemFocus()" /> <br/> <input type="text" value="hoge2" onblur="onElemBlur()" onfocus="onElemFocus()" /> <br/> <br/> <br/> <span id="debugmsg" rows="10" cols="50" ></span> <br/> </body> </html> 長々と申し訳ありません。 よろしくお願いいたします。
- 締切済み
- JavaScript
- OnBlurとIE7での非互換解消方法について
初心者ですが、申し訳ありません。 IE6では動作していたものがIE7で動作しない様になり、困窮しています。 親画面からポップアップでWindowをオープンさせ、そのWindowを必ず使わせるために、最前面に置こうとしています。 <BODY bgcolor="#FFFFFF" onBlur="window.focus()> このWindowの中ではテキストボックスが用意されており、その中から項目を選択して、同じWindowにあるボタンを押すと親画面に戻る様にしています。 IE6ではこれが動作をしますが、IE7になるとボタンが押せずに親画面に戻れません。しかし、もう一度選択するとボタンが効くようになりました。ところが再度選択するとまた効かなくなるというものです。 これを解消したいのですが、良策をご教示いただけませんでしょうか。 代替のscriptのヒントなどでも頂戴できればと思います。宜しくお願いいたします。
- ベストアンサー
- JavaScript
- タブコントロールについて
お世話になっております VB.NET 2010 Windows7 Windowsフォーム画面の開発をしています タブコントロールについてです 現在、タブページを使用しており、1ページ目で検索、2ページ目に検索結果一覧、3ページ目で詳細が見れるようになっています 1ページ目に検索条件を入れ2ページ目のタブを押すと、入力ミスがあったら2ページ目に遷移せずに入力ミスしたコントロールの場所にフォーカスが飛び、正常なら検索され2ページ目に遷移します ここで質問なのですが、今現在TabControl.Selection イベントに入力チェック、検索処理を書いています 入力チェックでミスがあった場合にタブページを移動しないこと、1ページから2ページ遷移で検索処理を起こすため、次のタブページを検知しなければいけないからです ですが、入力ミスが起こった際、フォーカスが入力ミスした項目に飛びません 1ページ目の最初の項目に飛んでしまいます おそらく、タブページ移動(2ページ目に飛ぶ)→入力ミスでフォーカス移動→タブページ移動キャンセル(2ページ目から1ページ目に飛ぶことでタブコントロールにフォーカス移動)→タブページの次の項目 となっていると思われます DeSelectingイベントに入れると、入力ミスした際にエラーのある項目に飛ぶのですが、そうすると2ページ目に移動しようとしたのか、3ページ目に移動しようとしたのかが分からなくなってしまいます 押したタブページが検知でき、なおかつキャンセルされたときにフォーカスが移動できるような方法ありますでしょうか よろしくお願いします
- 締切済み
- Visual Basic
- IEのイベントでのウインドウ位置の取得
以前に、MdNの「リンクにマウスオーバーするとポップアップで説明が表示される」というサンプルの記述がうまく動作しないという質問で、FairefoxやSafariではその回答でうまく動作するようなのですが、IEの動作がまだ駄目なようなのです。 IEのイベントが発生した時のマウス座標の取得は、Javascriptで、 function OnScreenHelp(x,y){ if(document.all) { /* IEでの処理 */ document.getElementById(strID).style.left = event.x + document.body.scrollLeft + 15; document.getElementById(strID).style.top = event.y + document.body.scrollTop + 0; }else{ /* IE以外の処理 */ document.getElementById(strID).style.left = x + 15 + "px"; document.getElementById(strID).style.top = y + 0 + "px"; } } のような記述になっているのですが、関数OnScreenHelp(x,y)のx,yがbodyの本文内で、event.pageX、event.pageYのようにNN系の記述になっているため、IEではこのx,yの値は使えないので上記のような記述になっているようなのです。上記の記述ではうまくポップアップしてくれないので、 event.xやevent.yの所の記述がまずいのかな?と思って、ちょっと調べてみて、window.event.offsetXやwindow.event.offsetYに変更してやってみたのですが、うまくいきません。ここの所の、IEの記述としては、どのように記述したらよいか分かりかねています。ご経験のある方、ご教示願えたらと思います。 よろしくお願い致します。
- 締切済み
- JavaScript
- 開いているWindowの高さと幅を取得したい
現在開いているページのWindowの高さと幅を取得したいのですが window.outerHeightなどはIEでは使えないようです。 IEではWindowの高さと幅を取得する方法はないのでしょうか。
- ベストアンサー
- JavaScript
- フォーカスを持っているコントロールを取得する方法はありますか?
こんにちは。 JavaScriptで、イベントを使用せずに、任意のタイミングで現在フォーカスをもっているコントロールを取得することはできないでしょうか? プロパティでフォーカスされているかどうかを示すBool値を返すのとかはないですか?? どうぞ教えてください。
- ベストアンサー
- JavaScript
- 子ウィンドウの情報を取得したい
window.openを複数行い、各ウィンドウの情報を取得したいのですが 配列変数などで管理せずwindowなどで取得は可能でしょうか? 試しに作成したソースです --ココカラ(oya.html)-- <html> <head> <script type="text/javascript"> <!-- //この方法で取得ができるが var koList = new Array(); function openKoA(){ kowin = window.open("ko.html", "kowin" + koList.length); koList.push(kowin); } function koListA(){ for(i in koList){alert(koList[i].document.getElementById("t1").value);} } // 配列で管理せずにwindow等にある情報で取得したい function openKoB(){ window.open("ko.html"); } function koListB(){ alert("子供リストなど"); //window.childNodes とか } --> </script> </head> <body> <input type="button" value="openKoA" onclick="openKoA()"> <input type="button" value="koListA" onclick="koListA()"> <br> <input type="button" value="openKoB" onclick="openKoB()"> <input type="button" value="koListB" onclick="koListB()"> </body> </html> --ココマデ(oya.html)-- --ココカラ(ko.html)-- <html> <body> <input type="text" id="t1" value="aa"> </body> </html> --ココマデ(ko.html)-- 以上、よろしくお願いします。
- 締切済み
- JavaScript
お礼
think49さん 早速の回答、ありがとうございます。 window.onfocus/window.onblur 共にevent.srcElementはnullを返すようですね。。。 しかし回答から 全Elementに対してのonfocus/onblurイベントを、jQueryを利用したセレクタ指定のハンドリングするとかしか方法がないのかな? と方法を思いつきました。 が、、、 あまりやりたくない方法ではあります。。。 でもそれしかない??? うーん、、、 悩ましいところです。