プロが教える店舗&オフィスのセキュリティ対策術

Movable type 内に配置したFLASHについての質問です。

外部ファイルのライブラリーのアセットを、リンケージで読み込むタイプのSWFファイルをMovable type 内に配置しました。

ところがベースになっているのSWF画像は見えるのに、外部sharedライブラリーからリンケージでリンクしているムービークリップ、グラフィック、ボタンが一切読み込まれません。

普通のウェブサイト上では問題なく動いていたSWFファイルなのですが、Movable type 用に何か書き込まなければいけないスクリプト等があるのでしょうか。リンケージとMovable typeの相性が悪いのでしょうか。

どなたか解決策をご存知でしたら、是非よろしくお願い致します。

A 回答 (2件)

#1です。



> それ以外の階層ですと、絶対パスで指定しても
> 外部ファイルは読み込まれませんでした。
> なぜなんでしょうね。

なぜなんでしょうねと言うか...,
その下になぜか HTML のタグを書かれていらっしゃいますが,
一応 #1 で書いたことは理解できましたでしょうか?
Movable type のタグなどに付いては一切触れていません。

私が#1で書いたのは HTML のタグのURLのことではなく,
共有オブジェクトを呼び出す方のFlashの,
リンケージプロパティの,
「□ ランタイム共有用に読み込み」 のURLのことです。



#1で私が書いたことをもっと具体的に書きますよ。

外部ファイル の ライブラリ アセット の利用は,
一種の loadMovie みたいなものです。

SWF に 外部SWF を SWFごとロードするのが loadMovie,
SWFに 外部SWF の ライブラリ中のシンボルをロードするのが ライブラリ アセット の読み込みです。

実際には loadMovie でのオブジェクトの扱われ方と,
ライブラリ アセット の読み込みオブジェクトとは扱われ方が違う部分がありますから,
決して loadMovie と ライブラリアセットの読み込み は同じではありません。
しかし,
大括りで言うと,外部 SWF をロードするので同じようなものです。

その外部 SWF をロードするときのファイルパスが,
読み込む側の SWF からのパスではなく,
読み込む側の SWF を貼り付けた HTML からのパスになります。


例えばファイルの階層構造が次のようになっていたとします。

 任意のフォルダ
   ├ main.html (aaa.swf を貼り付ける)
   └ flash (フォルダ)
      ├ aaa.swf (bbb.swfのアセットをロード)
      └ bbb.swf (アセットを提供するソースSWF)

「aaa.swf」から「bbb.swf」のアセットを使用するとします。
「aaa.swf」=ターゲット,「bbb.swf」=ソース ということです。
その 「aaa.swf」 は1つ上の階層の 「main.html」 に表示されるものとします。

この場合,
「aaa.swf」のライブラリのシンボルのリンケージプロパティから
ランタイム共有用に読み込むURLは,
[ bbb.swf ] ではなく [ flash/bbb.swf ] になります。

SWFからのパスではなく,それを表示させているHTMLからのパスになるからです。


しかし,これ↑は一般的なサイトだから言えることです。

Movable type の場合は一般的なサイトと違って,
あちこちに同じようなページができます。
ですから, [ flash/bbb.swf ] のように相対パスを定めることができません。

しかたがないので,
[ http:// ~~/○○/flash/bbb.swf ]
のような絶対パスを指定する必要があります。
(絶対パスにするとアップしない限り動作検証ができないことが難点ですが。)

ということを #1 で書いたのです。



========================

> ほとんど問題なく読み込まれてるのですが、
> 幾つかのリンケージされたボタンがなぜか機能してません

これは,上のこととは 全く別件 ですね。
問題は切り分けて考えてください。

この件は大きく分けて2つの質問内容にとることができます。

1 アセットを提供する側のボタンに設定したスクリプトが動作しない
2 アセットを読み込む側のボタンに設定したスクリプトが動作しない



1 アセットを提供する側のボタンに設定したスクリプトが動作しない

これは当然です。

on (release) {
gotoAndPlay(2);
}

や,

そのボタン.onRelease = function(){
gotoAndPlay(2);
};

これらは,
"インスタンス" に対して直接書いたり,
"インスタンス" に対しフレームなどで定義するものです。
"シンボル" に対しては直接書いたり,フレームなどで定義することはできません。

ライブラリの "シンボル" を共有するのが ライブラリ アセット ですから,
アセットを提供する側のボタンに設定したスクリプトが動作しないのは当然です。


2 アセットを読み込む側のボタンに設定したスクリプトが動作しない

実際にやってみましたが,
アセットを読み込む側のボタンに

on (release) {
gotoAndPlay(2);
}

などを書いてみても動作しませんね。
こういう階層にかかわるものでなく,もっと単純に,
trace("あああ");
でも動作しません。

ボタンの共有はしたことがなかったので初めて気づきました。

ムービークリップの共有であれば,
on (release) { ○○ } は動作します。

原因などはわかりません。


しかし,ボタンにインスタンス名を付けて,

そのボタン.onRelease = function(){
gotoAndPlay(2);
};

などは動作しましたよ。
このようにボタンに対して何かの動作を定義すればうまく行くと思います。
    • good
    • 0
この回答へのお礼

すっかりお礼が遅くなってしまい、申し訳ありませんでした。
中途半端な知識で日々やりくりしているから、こういう基本的な所でいい加減な所が露呈されてしまうんですよね・・・。
丁寧に説明していただいて、ありがとうございます。無事動かす事が出来ました。
Movable Type が初心者なので、そっちにばかり気が行ってました。action scriptもごらんのとおりの知識なのですが。^^;

とっても勉強になりました。感謝です!! ありがとうございました。

お礼日時:2008/08/13 21:26

ライブラリーアセット であっても,loadMovie であっても,


また,
普通の HTML であっても,Movable type であっても,
基本的に外部ファイルのパスは,SWFを表示させているHTMLからのパスなります。
(SWFからのパスではありません。)


普通のサイトですと,
HTML と同じ階層フォルダ か,
もしくは HTML の階層から間近なフォルダに外部SWFを置きます。
またその HTML の所在は変動しません。
ですからあまり問題にはなりません。


しかし,
Movable type の場合は,生成される HTML とアップした SWF は普通,ぜんぜん別のところにあります。
さらにまた,
表示させる方法(アーカイブのHTMLを見る場合と,今日の最新日記からHTMLを見る場合など)によって,
同じページ内容を見るにしても HLML のアドレスは変わります。


ですから Flash を使う使わない以前に,
Movable type 内のHTMLどうしのハイパーリンク,
またはJPEGなどの貼り付けリンクであっても,
http:// などから始まる絶対パスになっています。


SWF のリンクも,
いちいち見るページによってスクリプトを変えることは不可能(できても難しい)ので,
絶対パス にする必要があると思います。
(絶対パスにするとアップしない限り動作検証ができないことが難点ですが。)
    • good
    • 0
この回答へのお礼

詳しい回答ありがとうございます。
Movable type初心者なのでとても勉強になります。

アーカイブHTML(PHP化してるのですが)と同じ階層に本SWFとsharedライブラリーSWFを置いたら、読み込まれました! 
それ以外の階層ですと、絶対パスで指定しても外部ファイルは読み込まれませんでした。なぜなんでしょうね。

ほとんど問題なく読み込まれてるのですが、幾つかのリンケージされたボタンがなぜか機能してません(単純なgotoAndPlayの組み合わせです)。やっぱり何か足りないのでしょうか・・・。

<embed src="http://xxxx.com/xxxxx.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" height="200" width="400">

これしか書いてないのですが・・・。

お礼日時:2008/07/23 22:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!