- PR -

アクセスキーを連打するとJavaScriptエラーが発生

1
投稿者投稿内容
みす
会議室デビュー日: 2005/09/01
投稿数: 11
投稿日時: 2007-03-01 15:07
お世話になっております、みすと申します。
アクセスキーの使用について質問させて下さい。

画面再読み込み時にアクセスキーを連打するとJavaScriptエラーが発生してしまいます。
画面構成は縦3つのフレームにわけており、
一番上のフレーム:入力項目が配置されている画面
二番目のフレーム:ボタンが配置されている画面
三番目のフレーム:ユーザーIDなどの情報を表示する画面
となっています。

二番目のフレームのボタンにはアクセスキーを設定して(はいボタンなら"Y"など)いるのですが
ボタン押下でsubmitが走り画面を読み込んでいる最中にアクセスキーを連打すると
「オブジェクトでサポートされていないプロパティまたはメソッドです」エラーが発生してしまいます。
(ただ、エラーが発生しても画面再読み込みしてしまうのでエラーで画面が動かなくなるということはありません)

デバッガーでエラー発生箇所を見ていたのですが、
二番目のフレームのHEADタグ内で発生しているようでHTMLの読み込み時に起きているようです。

読み込み時に発生なのでonLoadで拾うことができずJavaScriptで何らかの制御をかけることもできません・・。
(そもそもアクセスキーの制御なんてできるのかということもありますが・・)
ネットや書籍等で探してみたのですが対処法が見つからず、こちらで質問させていただきました。

もしこのような現象にあったことがある方や対処法がわかる方が
いらっしゃいましたら是非ご教授いただければと思います。

よろしくお願いいたします。
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2007-03-01 15:39
>もしこのような現象にあったことがある方
一応あります。

正確にどのような現象かは実際に見てみないと分からないですが、フレーム分けしてい、という事なので、完全にページが読み込まれていない状態でフォームにアクセスしようとするから、オブジェクトが存在しない旨のメッセージが出るのだと思います。

なんとかするとしたら、
・アクセスキーを押したら、対象のページ用に、例えば、now_loading_flgなどを付けて、trueにする。
・now_loading_flgがtrueの間は、何度アクセスキーを押されても相手にしない。
・ページがロードしたら、ページの中に、now_loading_flgをリセットするスクリプトを仕込んでおく。
(もしくは、ひょっとしたらフレームのonloadイベントが有効かもしれません。)

ですが、見ての通り複雑なので、今やるとしたらajaxでそれぞれのページ部品を表示させてやる、というのがいいでしょうね。
みす
会議室デビュー日: 2005/09/01
投稿数: 11
投稿日時: 2007-03-01 16:47
冬寂様

迅速なご返信ありがとうございます!

>・アクセスキーを押したら、対象のページ用に、例えば、now_loading_flgなどを付けて、trueにする。
>・now_loading_flgがtrueの間は、何度アクセスキーを押されても相手にしない。
>・ページがロードしたら、ページの中に、now_loading_flgをリセットするスクリプトを仕込んでおく。
>(もしくは、ひょっとしたらフレームのonloadイベントが有効かもしれません。)

対象ページのonLoadで拾うことはできましたが、
画面を読み直すため、セットしたフラグ変数が初期化されてしまい
条件分岐にうまくひっかかりませんでした・・・。
フラグのセット・リセットのタイミングがよくないのでしょうか・・?

ソースは以下です。
実際は外部JSファイルにしており、通信のfunctionと対象ページのonLoadで実行するfunctionは別のJSファイルになっています。

-----ボタン押下で通信を行うfunction-----
function buttonClick(){
bAccessKeyOk = false; ←アクセスキー使用不可フラグを不可に
document.frm.submit();
return ;
}

-----対象ページのonLoadで実行するfunction-----
function JSMessage_initialize(){
//画面リロード中にアクセスキー押下されても無視する
if(!bAccessKeyOk){ ←ここでフラグが初期化されていてifに入らない
event.returnValue = false;
return;
}

<<その他onLoad時の処理>>

bAccessKeyOk = true; ←最後でアクセスキー使用okにする
}

>今やるとしたらajaxでそれぞれのページ部品を表示させてやる、というのがいいでしょうね。

通常はご指摘いただいたようにAJAX通信でボタンなどを表示させるようにしていますが
印刷機能などとの絡みで、どうしても画面読み込みを行わないといけない部分があり
一部画面遷移が発生しています・・・。

よろしくお願いいたします。
1