• ベストアンサー

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

専門家に質問してみよう