08/11/06 22:59:11 g/zoHdNm0
>>52
よくぞ聞いてくれました。
色々と試行錯誤しましたが、最終的な実装における手法は至って簡単ですよ。
まず、脆弱性の対策で出来なくなったのは、「対話的操作無し」でクリップボードに
コピーすることです。逆に言うと、「対話的操作」があれば、コピーは可能なのです。
「対話的操作」というのは、マウスのクリックやキー入力などのことを指しています。
なので、ユーザさんに Flash のボタンを押してもらえるなら、それで解決なのです。
で、どうやってボタンを押してもらうか。ここが試行錯誤のポイントでした。
これまでもコピーの為に、メニューを「クリック」しているのですから、そのクリック操作を
どうにかボタンに渡せないか、ということを考えたのですが、これは出来ませんでした。
次に正攻法で、メニュー内にコピー用のボタンを用意したりもしたのですが、
操作性やスタイルとの連携や他にも幾つか問題があって、これも断念しました。
そこで、改めてメニューの「クリック」を利用出来ないか、色々と実験してみたところ
ボタンクリック時のマウスアップ・ダウンだけでもコピーが可能なことが分かりました。
ならばということで、コピーのサブメニューの背後にマウスアップに反応するボタンを
隠しておき、メニューの選択をクリックからマウスダウンで反応するように変更して、
メニューをクリックしてみると、マウスダウンでメニューが消え、直後のマウスアップで
ボタンが反応して、ちゃんとコピーが出来たのです。
その後も、ボタンをどう隠すか、マウスダウンしながらメニューの外に移動しても
ちゃんとボタンに反応させるにはどうすれば良いか、などなど試行錯誤ポイントは
あったのですが、最終的には
・「コピー」のサブメニュー表示時に全画面を覆う透明なボタンを最背面に表示
・マウスダウン直後にボタンを最前面に移動してイベントを拾わせる
という実装に落ち着きました。まだ一部改良の余地がありますが…
そういう訳で、特殊なことはやっていませんが、Flash 側がマウス「クリック」時だけ
コピーを許可するように仕様変更しないことを、祈るばかりです…