• ベストアンサー

SharedObjectについてです

1つのwebページに2つflashをはめ込んでいるのですが、その両方に同じSharedObjectを読み込ませたいと考えています。 my_so = SharedObject.getLocal("local","/"); しかし、1つ目のflashは読み込んでも、2つ目のflashが、"undefined"になってしまいます。 なぜでしょうか?何か良い方法がありましたら、ご指導御願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#35109
noname#35109
回答No.2

#1です。 #1で書いたサンプルの場合, 同じ HTML に2つの SWF を表示させても, 2つとも正常に動作しましたよ。 つまり,1つめの SWF のインスタンス名「myTextBox」 が 29 を表示したとしたら,もう1つも 29 を表示しました。 また次に表示させたときは,1つめの SWF が 30 を表示し,もう1つも 30 を表示しました。 当たり前ですね。同じ SOL を参照し,29 の次は 30 という値を 両者ともが保存するので 29 の次は 30 になります。 また,こう書いた場合↓, ----------------------------------------------- my_so = SharedObject.getLocal("local", "/"); if (my_so.data.myText == undefined) { my_so.data.myText = 10; } else { my_so.data.myText++; my_so.flush(); } myTextBox.text = my_so.data.myText; ---------------------------------------------- つまり,  my_so.flush(); を付け足したのですが, この場合は,1つめの SWF が 29 を表示したとしたら,もう1つは 30 を表示しました。 また次に表示したときは,1つめの SWF が 31 を表示し,もう1つは 32 を表示しました。 ちゃんと加算されていますね。 やっぱり何とも言えませんね…,どこが変なのかはやっぱりわかりません。 my_so.flush(); を用いた上に,もっともっとデータが重い場合は, 片方が書き込み中にもう片方が参照しようとするので, ひょっとしたら2つめがロード失敗をすることも起こるかもしれません。 可能性は,それくらいしか思いつきません。 もし,その可能性が考えられる場合,でなおかつ flush(); が必要でなければ, flush(); を取ってみてはいかがでしょうか。 また,仮にそうであったとして,flush(); は取れない場合,その対処法はわかりません。

ohirosi
質問者

お礼

ご回答有難う御座います。 flush();を外し、flash自体も軽くしたら成功しました。 いろいろインターネットで調べていたのですが分らず困っていたところ本当に助かりました。どうも有難う御座いました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

noname#35109
noname#35109
回答No.1

書かれている内容からだけでは何とも言えません。 例えば, 新規ドキュメントの作成から, _root のステージ上に 「myTextBox」 というダイナミックテキストのテキストフィールドを用意し, フレームに次のようなスクリプトを書いたファイルを2つ作成し, ------------------------------------------ my_so = SharedObject.getLocal("local", "/"); if (my_so.data.myText == undefined) { my_so.data.myText = 10; } else { my_so.data.myText++; } myTextBox.text = my_so.data.myText; ------------------------------------------ それぞれ別名のSWFファイルをパブリッシュして調べてみましたが, どちらを開いても, どちらも,同じフォルダに,同じ名前 (local.sol) の SOL ファイルが作成されるので, どちらとも「myTextBox」に表示される値がつづきから加算されましたよ。 私の場合は, C:\Documents and Settings\ユーザ名\Application Data\Macromedia\Flash Player\#SharedObjects\5KFZEBMK\localhost\local.sol というパスで保存されました。 人によって違うと思います。 また,ネットにアップすると当然保存される場所も変わります。 「Flash Player」フォルダあたりから,「.sol」 を検索して, 日付順などのに表示すれば保存されたかどうかがわかります。 私は,SharedObject を使った物を作成する場合,いつも, SOL ファイルを作っては消し,作っては消ししながら実験しています。 うまく行かない場合, SOL ファイルを作っては消ししながらパスを確認すると, 作成されなかったり,とんでもない所にできたりするので, どこで間違いをしているのか,わかる場合が多々あります。

ohirosi
質問者

お礼

度々すいません。追記で説明させて頂きます。swfでパブリッシュすると、solデータを読みこめるのですが、htmlでパブリッシュすると読み込めません。

ohirosi
質問者

補足

ご回答有難う御座います。 申し訳御座いません。私の説明不足です。 私の場合も、別名のswfを別々にパブリッシュするとそれぞれのswfに、対しては、solデータが反映されるのですが、1つのwebページに2つのswfをはめ込んで、ほぼ同時にパブリッシュした場合、必ず、1つのswfしか開かなくなります。2つそれぞれ、solのファイルを読み込む時間を変えて時間差を作ってみたり、webページをフレームで分割したりしてみたのですがうまくいきません。何度も大変申し訳御座いませんが、宜しく御願い申し上げます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • SharedObjectの動作がうまくいかない。

    一度設定したボタンの状態をSharedObjectで保存して、次にアクセスした時に反映されるようにしたのですが、うまく動作しません。スクリプトは下記の通りです。 //ここに現在のロード時の状態を呼び出す onClipEvent (load) { //シェアードオブジェクトの呼び出し mySO = SharedObject.getLocal("topmusic","/"); _root.music = mySO.data.state; //初アクセス時の補正 if (mySO.data.state == null){ mySO = SharedObject.getLocal("topmusic"); mySO.data.state = 1; mySO.flush(); _root.music = 1 } } //クリックされた時にオン・オフを切り替える on (release) { _root.music = _root.music*(-1); //フラグ反転 } //クリックされた結果をローカルに保存する。 mySO = SharedObject.getLocal("topmusic"); mySO.data.state = _root.music; mySO.flush(); } ===================== 以上はメインタイムライン上に配置されたムービークリップ(button)に記述したスクリプトです。 ローカルには新しくファイルが作成されているので、何がしかの処理はされているようです。 もしかして、ローカル保存した

    • ベストアンサー
    • Flash
  • SharedObjectの使い方(長文です)

    制作しているゲームに、セーブ機能を付けようと 下記サイトの、テキストセーブflaや 他のサイトを参考にしましたがうまく作動しません http://mamnag.org/prmx/flash/sharedobject.html 長文で申し訳ないです どなたか分かる方教えてください(_) 環境は、FLASH CS3 アクションスプリクト2.0です ■ゲームのオープニング画面に『スタート』と『ロード』ボタン、 ゲーム内に『セーブ』ボタンを置いて、下記のASを書きました ◆スタートボタン(インスタンス名は、startbtm) on(release){ var so = SharedObject.getLocal("my_data"); if(so){ so.clear(); } nextScene();} //次のシーン(ゲーム内容へ飛ぶ) ◆ロードボタン(インスタンス名は、lordbtm) on(release){ SharedObjLoad(); } ◆セーブボタン(インスタンス名は、savebtm) on(release){ _root.saveData(); } ■フレームアクションスプリクト(1) --------------------------------------------------------- //SharedObjectインスタンスの生成 SO_instance = SharedObject.getLocal("mydata"); //保存用サンプルデータを作成 var arrayData = new Array("aaa","bbb","ccc","ddd","eee"); var stringData= "日本語文字列";//この日本語もUTF8で保存されます。 //データを保存(変数を代入していますが、直接リテラルを入力することも可能です) SO_instance.data.savebtm = arrayData; SO_instance.data.savebtm = stringData; //保存したデータの呼び出し。(出力ウインドウで確認してください) trace("SO_instance.data.savebtm : "+SO_instance.data.savebtm); trace("SO_instance.data.lordbtm : "+SO_instance.data.lordbtm); --------------------------------------------------------- ■フレームアクションスプリクト(2) --------------------------------------------------------- //SharedObjectインスタンスの生成 mySharedObject = SharedObject.getLocal("●●.swf"); //ホストのルートに保存する場合:mySharedObject = SharedObject.getLocal("●●.swf"); //保存したデータの呼び出し _root.lord = mySharedObject.data.lordbtmD; //saveボタンが押されたときにテキストフィールドの変数を保存 function saveData(){ mySharedObject.data.savebtmD = _root.savebtm; } --------------------------------------------------------- サンプルflaに、フレームASが二つあったので そのまま使いましたが、これでいいのでしょうか?? 出力には SO_instance.data.savebtm : 日本語文字列 SO_instance.data.lordbtm : aaa,bbb,ccc,ddd,eee という文字がでました

  • ローカル共有オブジェクトの使い方

    ActionScript2.0でウェブを開発中です。 a.swfで保存したローカル共有オブジェクトをb.swfで読み込もうとして うまくいきません。 以下のb.swfのコードを参照してください。 //ローカル共有オブジェクト 取得 my_so = SharedObject.getLocal("so1") ; trace("my_so.data.date=" + my_so.data.date) ; a.swfでは、"so1"という名前でローカル共有オブジェクトを生成して flush()しています。 a.swfでは読めるのですが、b.swfでは読み込むことができません。 もともとの仕様なんでしょうか?

    • ベストアンサー
    • Flash
  • SharedObject.getLocal()、オブジェクト名.data.変数の「変数」の部分に変数を入れる方法について

    SharedObject.getLocal()、オブジェクト名.data.変数の「変数」の部分に変数を入れる方法について ActionScript初心者なので頓珍漢な事を書いているかもしれませんが、 よろしくお願いします。 オブジェクト名.data.変数の変数の部分に変数を入れたく、 AS2.0で //////////////////////////////////////////////// my_hozon = SharedObject.getLocal("test", "/"); count = 0; for (count=0; count<=3; count++) { abc = "test_"+count; trace(abc); my_hozon.data.abc= "a"; trace(my_hozon.data.abc);//結果"a" trace(my_hozon.data.test_0);//結果"undefined" trace(my_hozon.data.test_1);//結果"undefined" trace(my_hozon.data.test_2);//結果"undefined" trace(my_hozon.data.test_3);//結果"undefined" } //////////////////////////////////////////////// と書いてみたのですが、 trace(my_hozon.data.abc); は結果が返ってきたのですが、 trace(my_hozon.data.test_0); trace(my_hozon.data.test_1); trace(my_hozon.data.test_2); trace(my_hozon.data.test_3); だとundefinedになり失敗しました。 どうすれば変数に変数が入るのか教えていただけないでしょうか。 よろしくお願いします。

  • SharedObjectの保存先を指定について

    Flash MXでSharedObjectを利用して、データを保存しようと思います。 Windowプロジェクター(test.exe)をCドライブの直下のtestフォルダに保存し、testフォルダ内にaaa.solを生成させたいと思いますが、別のフォルダに保存されます。testフォルダ内に保存する方法はあるのでしょうか?それともアクションスクリプトが間違っているでしょうか?ご教授ください。よろしくお願いします。 on (release) { myLocalSO = sharedobject.getLocal("aaa","/test"); myLocalSO.data.name = box.text; myLocalSO.flush(); }

    • ベストアンサー
    • Flash
  • SharedObjectが効かない

    FLASHで、一定時間内にアクセスするとオープニングを飛ばすスクリプ トを書いています。Javascriptのクッキーと同じスクリプトの「SharedObject」を使用しています。 www.hfm-kenchan.com/Lesson/log_qa/D0512073.htm こちらのサイトの解説とサンプルを使用させてもらい、作ってみました が、ページを更新しても1フレーム目からのアニメーションが始まって しまい、スクリプトが効いてません。 現在作っているファイルのアニメーションが25fps、171フレームまであるのが原因だと思いますが。 変数に入っている数字などを変えてみましたが、効きません。 同じサンプルでもレイヤー数がスクリプト用のレイヤーと合わせても3 レイヤー、フレーム数11フレームで作ると効きます。 スクリプトのレイヤーにさらに別のスクリプトを書き加えてやる必要があるのかと思いますが、スクリプト素人である為判りません。 どなたか判る方いらっしゃるでしょうか。お教え下さい。 1フレーム目に入るスクリプトを書いておきます。 span = 15; nowDate = new Date(); nowAC = nowDate.getTime(); cookie = SharedObject.getLocal("accessTime"); if (cookie.data.beforeAC != undefined) { Time = Math.floor((nowAC-cookie.data.beforeAC)/1000); cookie.data.beforeAC = nowAC; if (Time < span) { this.gotoAndStop("menu"); } } else { cookie.data.beforeAC = nowAC; } 使用ソフトはFLASH8、環境はWDXPです。どなたかお助け下さい。

  • [ActionScript3.0]ローカルのデータをサーバに同期させる方法

    ローカルで作った値を、オンラインにつないだ時にサーバに同期させるものを作りたいと考えています。 環境は以下のような環境で製作しています。 Flash CS4 ActionScript3.0使用 OS:Windows XP SharedObjectを用いて、ローカルに保存されたSWFで値を保存し、サーバーにあるSWFでローカルで作られたSharedObjectを参照してそれを使うことができないかと考えました。 getLocal( "my_data", "/" ); と指定して実際にためしてみると、ローカルのものと、サーバーでつくられるSharedObjectを別のものになり、同期させることはできませんでした。 他に方法はないかしらべると、getRemote関数なるものがあり、それを用いたものならばできないかと考えやってみましたが、RTMPサーバーを構築していない為、コンパイル時にコネクトできないとエラーを吐かれ使うことができませんでした。 そこでお聞きしたいことは、Flashを用いてローカルに保存されたデータをサーバーでも読み込むことができるのでしょうか? また、もしできるようならばどのような方法を用いればよろしいでしょうか? 宜しくお願いします。

    • ベストアンサー
    • Flash
  • SharedObjectに変数を格納したいのですが、、

    最近Flashの勉強を始めたばかりで、この件についてどう調べても分からないので教えていただけませんでしょうか。 SharedObjectに、数値や文字列を保存することはできるのですが、 変数をそのまま保存する方法はありますでしょうか。 XMLからデータを読み込み ⇒ 読み込んだデータをSharedObjectに保存 ⇒ SharedObjectから呼び出して利用 という流れを作りたいと考えています。 具体的には、XMLから読み込んだデータを変数Aに格納して、変数AをSharedObjectに保存しようとしているところがうまく行かず、困っています。。 良い方法がありましたらご教授ください。 どうぞ宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • SharedObjectのディレクトリ(フォルダ)名について。

    こんにちは、はじめて質問をさせていただきます。 今、FlashのSharedObjectをサンプルで作成しています。 作成自体はうまくいき、サーバーにアップしました。 一つ質問なのですが、SharedObjectが保存されるディレクトリ(フォルダ)の名前はFlashでSharedObjectを作成する際に指定することはできないのでしょうか? 今、私はロリポップサーバーにアップしているので、保存されているフォルダの名前が「sunnyday.jp」という名前になっています。 このフォルダ名を変更する方法が分かる方がいらっしゃいましたら教えてください。お願いいたします。 http://kouchanvv.sunnyday.jp/sharedobject/sharedobject_vercs3.swf サーバーに上げたデータはこれです。 テキストフォームに入力し、SAVEを押すとSharedObject(.sol)が作成されるようになっています。

  • 変数名に変数を使う

    Flash8を使用し、ActionScript2で書いています。 変数名に、他の変数の値を参照したいと考えています。 http://www.flash-jp.com/modules/newbb/viewtopic.php?topic_id=6679&forum=6 を見て、同じようにやってみました。 すると、 animal = "cat"; catlLegs = 4; とした場合、animalの値であるcatを参照し animalLegs = 4; とする、というような単純なものはうまくいきました。 しかし、SharedObjectのdataプロパティで、属性名を変数にしようとすると うまくいきません。 dataNameという変数に、soというSharedObjectのneko属性の値を代入する場合、 so:SharedObject = SharedObject.getLocal("hoge"); animal = "neko"; dataName = _root["so.data."+animal]; としたのですが、 trace(dataName); の値はundefinedになってしまいます。 なお、 trace(_root.so.data.neko); では正しく値が表示されます。 属性名前には他の変数の値を参照できないのでしょうか。 それともSharedObjectではできないのでしょうか。 なんとか実現する方法をおしえていただければと思います。 よろしくお願いいたします。

    • ベストアンサー
    • Flash