• 締切済み

JavaScriptで可能でしょうか?

キー操作がメインのFlashアプリを作っています。 ブラウザで表示した際には、Flash以外何も置いていません。 アプリ実行中に、他に開いているウインドウをアクティブにし、再度Flashのブラウザをアクティブにすると、そのままではキー操作ができません。Flashの画面のどこかをクリックすればキー操作できるようになるのですが、知らない人だとフリーズしたと勘違いしそうなので、できればFlashのウインドウがアクティブになったら、Flashにフォーカスをセットするようなことをして、クリックしたのと同じ状態を作り出し、何もしなくてもキー操作ができるようにしたいのですが、JavaScriptを使ってこういうことをするのは可能でしょうか? どなたかお分かりになる方がいらっしゃいましたらよろしくお願いします。

みんなの回答

回答No.4

Flashゲームではよくある話だと思います。 試したわけではないですが、これでどうでしょうか。 <script> function setFocus(){ var obj=document.getElementById('flashobject')||document.getElementById('flashembed'); if(!!obj){ obj.focus(); } } window.onfocus=setFocus; //以下 余計なお世話 window.onload=function(){ var obj=document.getElementById('flashobject')||document.getElementById('flashembed'); if(!!obj){ obj.onblur=setFocus; } } </script> <object id="flashobject"> <param 略> <embed id="flashembed" 略> </object> <p>ゲーム開始後にここをクリック。<br> ”余計なお世話”があるとゲームを続けられるかも知れない。<br> ”余計なお世話”の弊害は不明</p>

dontarrow
質問者

お礼

ご回答ありがとうございました。 いただきましたアドバイスを参考に、色々試してみたのですが、どうやってもうまくいきませんでした。 調べた結果分かったのですが、Flashオブジェクトがアクティブな状態で、他のウインドウを前面に表示し、再度Flashオブジェクトのブラウザウインドウを前面に表示しても、window.onfocusイベントは発生しませんでした。ウインドウ内のどこかをクリックした時に初めてイベントが発生しました。ちなみにFlashオブジェクトのステージ外の何も無い所をクリックした状態(Flashオブジェクトは非アクティブ状態)からであれば、同様の操作でonfocusイベントは発生しました。ただしこの場合でも、「obj.focus();」を実行しているにも関わらずFlashオブジェクトがアクティブになることはありませんでした。 まだ他に方法が考えられるようでしたら、また教えていただけますと幸いです。よろしくお願いします。

  • cmc32000
  • ベストアンサー率41% (103/251)
回答No.3

cmc32000です。 document.write(" で書き出すのは、<object>から</object>まですべてです。"で挟むので<object以降の"は'に書き換えます。 ANb2さんの回答にあるように、セキュリティのためにflashの機能を制限しているので、このようにしないと動かなくなりました。 こうしなくても、「アクティブにするならクリックしてください」が表示され、もう一度クリックすれば動くようになりますが、分かりにくいですね。

dontarrow
質問者

お礼

ご回答ありがとうございました。 外部ファイルの関数からobjectを書き出すというのはおかげさまでうまくいきました。しかし、私が知りたいこととは若干違っております。ANo.2のお礼の欄に再度詳しく状況を書かせていただきました。もしよろしければご一読いただき、何かお分かりになるようでしたらお教えいただけますと幸いです。 よろしくお願いします。

  • MAN_MA_RUI
  • ベストアンサー率41% (426/1024)
回答No.2

> 私がやりたいことは、表示したい訳ではないのですが、タイミングとしては、一旦非アクティブになったFlashのブラウザが再度アクティブになった時です。そもそもブラウザがアクティブになった際というのは、何かイベントは発生するものなのでしょうか? Flashのブラウザって言うからしばらく考えました。Flashの場合ブラウザとは言いませんよ? Flash Playerを使って操作を行う部分だからコントロールと表現したり、Flash Playerの機能を埋め込んでるからオブジェクト表現したりとかそういう感じ(大雑把に言っての話) あと非アクティブとアクティブの意味を取り違えているようにもそうでないようにも見えます。 確認のためなので気を悪くしないでほしいですが、クリックして枠の表示されなくなった状態がアクティブ、枠の表示される常態が非アクティブです。 で、このアクティブ状態はページを表示している間だけ保持される仕組みとなっており、ページを一度移動すると再び非アクティブ状態となるため再度のアクティブ化が必要です。 最初からコントロールをアクティブ状態にし、いちいちクリックせずともいいようにするためにはコントロールを表示するため(埋め込むため)のタグ、embedなりobjectなりparamなり全てを外部JavaScriptファイルへ追いやる必要があります。 どんな方法でもいいから外部JavaScriptからタグを吐き出させるようにすれば問答無用でアクティブ状態となり、クリックしろと言うメッセージが出る非アクティブ状態にはなりません。 ちなみにこの原因はセキュリティ対策、とのことらしい。

参考URL:
http://www.microsoft.com/japan/windows/ie/using/techinfo/activexupdate.mspx
dontarrow
質問者

お礼

ご回答ありがとうございました。 私の表現が適切でなかったせいで、私がやりたいことが伝わっていないようですので、再度詳しくご説明させていただきます。 ちなみに、Flashオブジェクトのタグを外部JavaScriptファイルから書くことで、オブジェクトを最初からアクティブ状態にするというのはうまくできました。 しかし私がどうにかしたいと思っているのは、最初からオブジェクトをアクティブ状態にすることではありません。 私の作ったFlashアプリは、起動時にタイトル画面が表示され、そこからメニュー画面に進み、さらにそこからメインの画面に進みます。このメインの画面では、主な操作をキー入力で行います。 それで例えば、メイン画面で操作を行っている途中で、Flashオブジェクトを表示しているブラウザをそのままにして、メーラーを前面に表示してメールを確認し、終わったら再度Flashオブジェクトを表示しているブラウザを前面に表示します。そこで続きの操作を行おうとして何かキーを押したとしてもFlashオブジェクトは何の反応も示しません。見た目はアクティブ状態と同じなのに、もう1度Flashオブジェクトをクリックしないとアクティブ状態になりません。起動時であれば、枠線とクリックしてください、のメッセージが表示されるためクリックが必要であることは分かりますが、この場合はアクティブ状態と同じであるため非アクティブ状態になっていることが分からず、フリーズしてしまったと勘違いしてしまうかもしれません。 ですので、このような場合に再度クリックをしなくても続けてキー操作をできるようにJavaScriptを使ってオブジェクトをアクティブ状態にしたいと考えています。 まとめますと、私が知りたいのは、Flashオブジェクトを最初からアクティブ状態で表示する方法ではなくて、すでに表示されている、枠線が無い非アクティブ状態のFlashオブジェクトを、クリック以外の方法でアクティブにする方法およびそのScriptを実行するタイミングです。 長ったらしい文章で誠に恐縮ですが、お分かりになるようでしたらお教えいただけますと幸いです。よろしくお願いします。

  • cmc32000
  • ベストアンサー率41% (103/251)
回答No.1

先ず、javascriptで関数を作ります。 function RunSWF(){ document.write(" ここにflashのembetコマンドなどを書く ")} これを、htmlの外に外部ファイル.jsとして書き出し、さらにhtmlのヘッダーの中に <SCRIPT language=JavaScript src="外部ファイル.js"></SCRIPT> のように書き、 表示したいところで、 <script language="JavaScript" type="text/javascript">RunSWF();</script> のように関数を実行するスクリプトを書きます。 要するに、htmlの中にembetタグを書かないようにします。

dontarrow
質問者

お礼

早速のご回答ありがとうございました。 私JavaScriptやHTMLに関してはほとんど素人でして、せっかくのご回答なのですが、分からない部分が多々ございます。 誠に恐縮ですが、追加で質問させていただきますので、ご面倒でなければお教えいただけますと幸いです。 1.ご回答の中に、「表示したいところで」とありましたが、私がやりたいことは、表示したい訳ではないのですが、タイミングとしては、一旦非アクティブになったFlashのブラウザが再度アクティブになった時です。そもそもブラウザがアクティブになった際というのは、何かイベントは発生するものなのでしょうか? 2.Flashでパブリッシュして作成されたhtmlファイルでは、Flashに関する記述は概略次のようになっています。 <object classid="XXX" codebase="http://XXX" width="800" height="600" id="xxx" align="middle"> <param name="allowScriptAccess" value="sameDomain" /> <param name="movie" value="xxx.swf" /><embed src="xxx.swf" /> </object> この内、どこまでをRunSWF()関数の中で書けばいいのでしょうか?embedタグの部分だけでいいのですか? よろしくお願いします。

関連するQ&A

  • ネット上では動くjavascriptが、ローカルでは動かない

    FLASH初心者で、アクションスクリプトに詳しくないので質問です。 FLASHのボタンに別ウィンドウを開くためのアクションスクリプトをつけました。 on (release) { getURL("javascript:void(window.open('**.html','', 'height=**,width=**,resizable=yes, scrollbars=yes'));"); } このファイルをネット上にアップした場合はうまく動くのですが、 ローカルのHDだと、ボタンをクリックしても別ウィンドウが開かず、 フリーズしてしまいました。 flashでプレビュした場合は、「この操作には JavaScript は使用できません、Safari はこのような JavaScript の使用方法を許可していません。」というエラーメッセージの書かれたウィンドウが開きました。 どうにか、ローカルでも動くようにする方法はないでしょうか?

  • FlashからJavaScriptの呼び出し。

    FlashからJavaScriptの呼び出し。 html内にフラッシュを設置して中にJavaScriptを記入して ブラウザ操作(移動・リサイズなど)は出来たのですが、 できたらフラッシュファイルですべてで操作できるように収めたいです。 (アドレスバーなどで見栄えが悪く、ネット公開するものではないので) html表示でなくフラッシュで直接表示・処理をJavaScriptでさせたいです。 ぺーぺーには未だ早いのかもしれませんが、よろしくお願いします。

    • ベストアンサー
    • Flash
  • C++でJavaScriptを実行する方法

    お世話になります C++でJavaScriptを実行する方法はあるのでしょうか? やりたい事は、C++BuilderでFlashを操作して、FlashからJavaScriptを操作します(できるようなので。。。) あとは、JavaScript⇔C++が行えれば・・・と思ってます よろしくお願い致します

  • JavaScriptを使わないで二つのウィンドウ間でリンク

    失礼します!タイトルどおりなのですが 1 メインウィンドウ(本窓)からのターゲット「_blank」で新しいウィンドウ(サブ窓)を開く 2 サブ窓のリンクを押すと本窓のページが切り替わる というような作業をJavaScriptを使わないでやりたいのですが可能でしょうか?というのも、色々なブラウザーのユーザーが集まるサイトなのでJavaScriptでの操作は不安があります。 サブ窓をメニューリンクもしくはリモコンウィンドウというような形式で使いたいのですが。方法ありましたら教えてください。

    • ベストアンサー
    • HTML
  • JavaScriptを使えない環境について知りたい

    JavaScriptで小ウインドウを出して、クリック内容に応じて処理分岐させようと思っているのですが、 JavaScriptを使えない場合、どうなるのかが、気になっています。 JavaScriptを使えない環境とは、具体的にどういった環境が考えられるのでしょうか? ・古いブラウザ? ・スマートフォン? ・また、本来、使える環境なのに、ブラウザのJavaScriptを普段から使えないようにしている人とか、いるのでしょうか?  何か、そういうシェア割合みたいな資料はどこかにないでしょうか?

  • Flash内部からJavascript

    HTMLでページを作成しています。そのなかにFlashをおいています。 そのFlashのなかにある任意のボタンをクリックすると、JavascriptのwindowOpenを使用した別windowが開く…ということをやりたいんですが、そいうようなことは可能でしょうか? 可能だとして、ブラウザは対応できますか?? 一般的に行われていることなのでしょうか??

  • JavaScript実行後ページのダウンロード

    JavaScript実行後のWEBページをダウンロード出来るコマンドを探しています。 WEBページをブラウザで表示すると、wget等のダウンロードコマンドでダウンロードしたHTMLとは内容が異なる場合があると思うのですが、JavaScript実行後のHTMLをダウンロード出来るコマンドはないでしょうか。 もしかしたら私の勘違いで、実はJavaScriptが実行されたからWEBページの内容が異なるのではない場合もあるかと思うのですが、とにかくブラウザで表示されるのと同じ内容のHTMLをダウンロード出来るコマンドを探しているという事です。 どなたかご存知の方がおられましたら、お教え頂けないでしょうか。

  • Flash動画で、任意のフレームにJavaScriptが発動

    HPとflashの製作初心者です。 難易度の高い質問で失礼します! flash動画で、任意のフレームまで来たら ブラウザのウィンドウがブルブルっと揺れるようなものを作りたいのですが、 以下のことが分かりません。 ・ウィンドウがブルブル震えるJavaScript ・ActionScriptからJavaScriptを呼び出す どなたか、お分かりになる方いらっしゃいましたら よろしくお願いします!

  • FLASHとJavaScriptの連携について

    FLASHを使用してウェブサイトを作成しています。 Windowsアップデートにより、Flashのまわりに変な枠線が出るようになりましたが、こちらのみなさんのおかげで無事解決(JavaScript使用)しました。 新たな問題が。。。 現在外部javascript(***.js)を本文内で呼び出すというような形態をとっております。(以下参照)   document.write('<EMBED src="menu.swf" ...m/go/getflashplayer"></EMBED>'); このような状態でブラウザ(IE)のセキュリティが高い状態だと何も出ません。 FLASHのみの時は、中身は消えてもFlashがあった場所だけは真っ白になり「あー何かあるな」と観る人に感じられたのですが。 javascriptがオフの時はメッセージを出そうと、ページのトップの一番上に、 <noscript>メッセージ</noscript> と付け加えました。 これでjavascriptがオフの時はメッセージが出るのですが、ブラウザのセキュリティの設定が高で、 [レベルのカスタマイズ]-[スクリプト]-[アクティブスクリプト]を「有効にする」にすると、上記のメッセージは表示されませんが、Flashも表示されないままです。 メニューなどがFlashで作成してあるのですが、それがそのまま上に詰まってしまって、何もなかったかのようになってしまいます。 これはどうしたらいいのでしょうか? Flashだけ、JavaScriptだけならなんとかなりそうなんですが、これらを組み合わせた時はどうしたらいいのでしょうか? もしくは、[ActiveXコントロールとプラグイン]-[ActiveXコントロールとプラグインの実行]で「有効にする」を選択するとFlashが表示されましが、 これをユーザーに「有効にする」にしてください、というメッセージを表示するようにしたらよいのでしょうか? この場合はどのような方法がありますか?

  • フォーカスとドラッグ

    focus()すると、フォーカスされたウインドウが、マウスの左を押しっぱなしのようになってしまい、マウスを動かすと文字が選択されてしまいます。 そのウインドウを最前面でタイトルバーを活性にしたいので、focus()を実行するのをやめるわけにいきません。 その後、どうしたらマウス左クリックのような状態を解除できるでしょうか。 それは、マウスを使うのではなく、JavaScriptでです。

専門家に質問してみよう