Shockwave 10.2 バックスペース問題

| コメント(0) | トラックバック(0)

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()を行うようにしたほうがよい。

トラックバック(0)

トラックバックURL: http://www.kyucon.com/cgi-bin/blog/mt-tb.cgi/337

コメントする

アーカイブ