Hatena::ブログ(Diary)

jiroの日記 このページをアンテナに追加 RSSフィード

2007-12-23

[][]ExternalInterfaceのまとめ

JavaScriptとActionScriptの橋となるExternalInterfaceがなかなか言う事を聞いてくれませんでした。かなりBK。とりあえずまとめておくので、参考にしてください。

allowScriptAccess=alwaysにする

別ドメインから読み込んだものも動作させたい場合にはalwaysにする

objectタグのIDには必ず"external"という文字を入れなければいけない

IEでは次のようなパターンになっていないとaddCallbackが動作しない。正規表現で/.*external.*/

例えばexternalHoge

HTMLのフォームタグの中に入れてはいけない

IEではformタグのなかにobjectタグが入っていると動かない

スクリプトで動的に要素を追加する場合には注意が必要

例えばobjectタグのコンテナであるdivタグを生成した直後にobjectタグを追加すると動作しない

divタグを生成して、DOMツリーに登録されてから処理しないといけない

例えば下のようなかんじでinnerHTMLへの代入は遅延させなければいけない。ちなみにsetTimeoutすれば、必ずbodyにdivタグが追加されたあとにinnerHTMLが実行される

var container = document.createElement('div');
document.body.appendChild(container);
setTimeout(function() {
	container.innerHTML = '<OBJECT id=externalHoge height=100 width=100 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000>\
		<PARAM NAME="Movie" VALUE="CrossDomainBridge.swf?' + new Date().getTime() + '"><PARAM NAME="Src" VALUE="CrossDomainBridge.swf?' + new Date().getTime() + '">\
		<PARAM NAME="WMode" VALUE="Transparent"><PARAM NAME="AllowScriptAccess" VALUE="always"></OBJECT>';
	}
, 1);

ちなみに上のソースはIE用

swfのURLには時間をつける

IEでは同一URLのobjectタグを貼るとSWFのコンストラクタが1回しか呼ばれない。

他のブラウザでは問題ないけど、しょうがないからswfのURLの最後に時間をつけて別のswfだと信じ込ませる

上のソースはそのようにしてます

from CrossDomainBridge

CrossDomainBridgeを作るときにここらへんのテクニックを使ってます


こうしてみるとIEで散々な事になってるな〜

他にもれがあったら教えてくれると嬉しいです。


明日からまたもや旅行だ〜


追記:2008/01/06

新たに発見したので追加

JavaScriptからメソッドがコールされる場合、文字列の改行文字が異なる

ExternalInterfaceはブラウザによって入力される改行コードが異なる - jiroの日記

ブラウザ改行コード
IE6\r\n
FF2 win\n
Opera9 win\r\n
FF2 mac\n
Safari2 mac\n

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証