JavaScriptに関する色々
「mixi OpenIDのコミュニティ認証をバックグラウンドで行うプログラムを組んでみた」で色々躓いたのでメモ。
iframeの中身が異なるドメインである場合、DOM操作では親ウィンドウからiframeの情報を知ることができない。
まあ当然っちゃ当然だが。親と子双方の協力があっても無理っぽい。せめてiframeのlocation情報くらい取れればいいのになあ。
ただしDOM操作ではなく、サーバー経由にすれば、iframeからサーバーに通知した情報を、親ウィンドウからJSONPとかで取りにいけば可能。
IEで、DOM要素のinnerHTMLにobjectタグを設定するときはclassid属性の指定が必須
innerHTMLでyoutubeを表示させたい場合など要注意。
以下はIEでは何も起こらない。
e.innerHTML = '<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/H95KDM7azrw&hl=ja&fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/H95KDM7azrw&hl=ja&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>';
以下ならIEでもFirefoxでも正常に表示される。
e.innerHTML = '<object width="425" height="344" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"><param name="movie" value="http://www.youtube.com/v/H95KDM7azrw&hl=ja&fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/H95KDM7azrw&hl=ja&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>';