QA@IT

IE8でモーダル表示した画面でファンクションキーが効かない。

5916 PV

いつも、お世話になっております。
ASP.NETで開発したWebアプリケーションにてJavaScriptを使用しファンクションキーを実装しております。
IE9に関しては問題なく動作するのですが、IE8で実行するとモーダル表示した画面でファンクションキーが効きません。
IE9では動作するのでIE8の問題だと思われます。
回避方法などご存知の方がおりましたら、御伝授願います。
よろしくお願いいたします。

回答

大変失礼しました。
ファンクションキーが効かないというのは、実装したJavaScriptが機能せずにブラウザ標準のファンクションキーが動いてしまうと言う事です。
例えば、F12キーを押すと開発者ツールが動いてHTMLのコードが画面下に表示されてしまいます。
IE9では問題なくJavaScriptで割り当てたファンクションキーでアプリケーションのボタンを押した時の動作を実装できています。なのでIE8の問題のような気もします。

コードについては、どこまで動いているのか分かっていない状態ですので、まずはデバックできる環境を作って、どこまで動いているのか確認してみたいと思います。

編集 履歴 (0)

長いコードをそのままベタッと貼り付けず、あくまで必要最小限にしてくださいとお願いしたと思いますが。

それから、そのコードで、「モーダル表示した画面でファンクションキーが効きません」というのは具体的にどういうことか、どういう操作をするとその結果はどうなって、それが期待していたこととどう違うのかなど、必要な情報があいてありません。

掲示板に書いてあること以外何も知り得ない回答者に、どういう情報を提供すれば回答者が質問者さんの状況を的確に理解でき、的を得た回答ができるか考えて質問を書いていただければと思います。

まず、ご自分で問題を再現できる必要最小限にコードを削ってください。コードを削る段階で原因がわかって自己解決できるかもしれません。

回答者に検証を期待するなら、そのままコピペすれば動くコードをアップしてください。

編集 履歴 (0)

以下ソースです。(画面表示の為、HTML部分は一部編集してます)
モーダル表示の為にフレームセットを使用してます。
よろしくお願いします。


<<ボタンクリック時のJavaScript>>

//フレームセット
url="DialogFram.aspx?source='"+画面のURL+"'";
//サイズ・ポジションの設定
hei=""+(parseInt(hei)+35);
wid=""+(parseInt(wid)+10);
left=""+(parseInt(left)-10);
feature = "dialogHeight:" + hei + "px;dialogWidth:" + wid + "px;dialogTop:" + top + "px;dialogLeft:" + left + "px;"
//モーダル表示
val = showModalDialog(url, '', feature + "resizable:yes; status:no;");


<< DialogFram.aspx >>

<'html>
<'head>
<'%
'引数の取得
Dim strSource As String = Request.Params("source")
%>
<'meta http-equiv="Content-Type" content="text/html; charset=shift_jis"/>
<'meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema"/>
<'meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR"/>
<'meta content="Visual Basic .NET 7.1" name="CODE_LANGUAGE"/>
<'meta content="VBScript" name="vs_defaultClientScript"/>
<'meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema"/>
<'link href="../cssStyle1.css" type="text/css" rel="stylesheet"/>
<'!-- ファンクションキーを制御するJavaSCript -->
<'SCRIPT language='JavaScript' src='FunctionFrame.js'><'/script>
<'/head>
<'frameset cols="*">
<'frame name="main" src=<'%=Server.HTMLEncode(Request.Params("source"))%>" id="main" onload="main_init();">
<'noframes>
<'pre id="p2">
<'/pre>
<'p id="p1">
<'/p>
<'/noframes>
<'/frameset>
<'/html>


<'<' FunctionFrame.js >>

/**

  • イベント付加(frameのonload時に呼び出し) / function left_init() { frames['left'].document.attachEvent("onkeyup", frm_left_keyevent); frames['left'].document.attachEvent("onhelp", help_disable); } function main_init() { frames['main'].document.attachEvent("onkeydown", active_blur); frames['main'].document.attachEvent("onkeyup", frm_main_keyevent); frames['main'].document.attachEvent("onhelp", help_disable); } /*
  • F1-F12キー押下時にフォーカス外す / function active_blur() { // 発生したイベントのキーコードを取得 var code = frames["main"].event.keyCode; var btnName; // F1-F12キーであれば、フォーカスを外す(チェンジフラグ立、自動計算等を行う為) if (code >= 112 && code <'= 123) { frames["main"].document.body.focus(); frames["main"].event.keyCode = null; frames["main"].event.returnValue = false; } } /*
  • F1でIEのヘルプ表示しないように / function help_disable() { return false; } /*
  • レフトフレームでキー押下時に実行される関数 / function frm_left_keyevent() { // 発生したイベントのキーコードを取得 var code = frames["left"].event.keyCode; // F1-F12キーであれば、無効化する(F1キー:112,... F12キー:123) if (code >= 112 && code <'= 123) { frames["left"].event.keyCode = null; frames["left"].event.returnValue = false; } } /*
  • メインフレームでキー押下時に実行される関数
    */
    function frm_main_keyevent() {
    // 発生したイベントのキーコードを取得
    var code = frames["main"].event.keyCode;
    var btnName = "";
    // F1-F12キーであれば、無効化する(F1キー:112,... F12キー:123)
    if (code >= 112 && code <'= 123) {
    frames["main"].event.keyCode = null;
    frames["main"].event.returnValue = false;
    }
    // 該当するキーコードで分岐。
    // それぞれのcase内に、実行したい独自の処理を記述する。
    switch (code) {

    // F1キー
    case 112:
        break;
    // F2キー
    case 113:
        break;
    // F3キー
    case 114:
        break;
    // F4キー
    case 115:
        break;
    // F5キー
    case 116:
        break;
    // F6キー
    case 117:
        // 何らかの処理
        if (frames["main"].document.getElementById("imdボタン名") != null) btnName = "imdボタン名";
        break;
    // F7キー
    case 118:
        // 何らかの処理
        if (frames["main"].document.getElementById("imdボタン名") != null) btnName = "imdボタン名";
    // F8キー
    case 119:
        break;
    // F9キー
    case 120:
        break;
    // F10キー
    case 121:
        break;
    // F11キー
    case 122:
        break;
    // F12キー
    case 123:
        // 何らかの処理
        if (frames["main"].document.getElementById("imdボタン名") != null) btnName = "imdボタン名";
        break;
    default:
        break;
    

    }
    // 該当ボタンがある場合
    if ( btnName != "" ) {
    frames["main"].document.getElementById(btnName).click();
    }
    return;
    }

編集 履歴 (0)

IE8で実行するとモーダル表示した画面でファンクションキーが効きません。

「モーダル表示」とは具体的にどうやっているのでしょう? 問題を再現するのに必要最小限のコードをアップしてもらえると、回答者のほうでも検証できるので、もう少しましな解答がもらえるかもしれません。

#長いコードをそのままベタッと貼り付けず、あくまで必要最小限にしてください。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。