InternetExplorerにおいてShockwaveコンテンツがアクティブになっているにもかかわらず、
バックスペースキーを押すと前のページに戻ってしまう不具合についての解決策。
objectタグにIDをつけ、それに対してfocus()を実行する。
例:
■dcr_embed.js
document.write("<object classid=\"clsid:166B1BCA-3F9C-11CF-8075-444553540000\"");
document.write(" codebase=\"http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0\"");
document.write(" ID=myMovie width=640 height=480>");
///中略///
document.write("</object>");
myMovie.focus();
上記だけでは、Shockwaveコンテンツ外をクリックしてしまうと問題が再発するので下記Lingoを記述しておく。
on startmovie
the mouseDownScript ="mousedown_func"
end
on mousedown_func
goToNetPage "javascript:myMovie.focus()"
end
つまりクリックでアクティブにしただけではフォーカスが移ってないので、
Javascriptのfocus()を使って明示的にフォーカスを移す必要があるということ。
たぶん、これで大丈夫じゃないかな。
■2007/4/30追記
上記、goToNetPageを使うとIEのリンク時に鳴るカチッという音が発生してしまう。
なのでgoToNetPageではなくexternalEventでJavascriptを呼ぶことにする。
例:
◆Shockwaveを表示するHTMLに下記を記述
<script language="JavaScript">
function dcr_focus() {
myMovie.focus();
}
</script>
<script language="vbscript">
sub myMovie_ExternalEvent(byVal aCommand)
call dcr_focus()
end sub
</script>
◆Shockwave内のムービースクリプトに下記を記述
on startmovie
the mouseDownScript ="mousedown_func"
end
on mousedown_func
externalEvent("dcr_focus()")
end
注:太字myMovieの部分は、objectタグのIDと一致させる。
■2007/5/2追記
Shockwaveエリアがブラウザウィンドウ内に入りきっていない状態でfocus()を行うとShockwaveエリアがウィンドウ上端にくるよう勝手にスクロールされてしまう。
なので、スクロール前(focusする前)のscrollTopを保持しておき、その位置へscrollTo()を使って戻す。
強制的にスクロール位置を調整すると一瞬ちらつく。
onFocus,onBlurで状態を見張り、フォーカスが外れている場合のみfocus()を行うようにしたほうがよい。
コメント