.Netで対応しているUpdatePanelを使う方法は 簡単に Ajaxアプリが実現できるので 重宝しているが、Script(AC_RunActiveContent.js) で表示するFlashをUpdatePanel内に配置し サーバーにPostBackすると初期状態で表示されていた Flashが消えてしまう。
いろいろ調べて見たが その解決方法はわからない。
AC_RunActiveContent.js ではなく swfobjectを使う方法だと PostBack後も UpdatePanel内に配置したFlashの再生が可能なようだ。ところがここページで開設しているのは swfobject1.5で 最新版swfobject2.2では少々使い方が違っている。FlashをHTMLに貼るライブラリ swfobject 2 を使うを参考に 実験した。
【default.aspx】
——- 省略 ———
<head runat=”server”>
——- 省略 ———
<script type=”text/javascript” src=”script/swfobject.js”></script>
<script type=”text/javascript”>
var flashvars = {};
var params = {
scale:’noScale’,
salign:’lt’,
menu:’false’,
allowfullscreen :’true’ };
var attributes = {};
</script>
</head>
<body>
<form id=”form1″ runat=”server”>
<asp:ScriptManager ID=”ScriptManager1″ runat=”server”>
</asp:ScriptManager>
<asp:UpdatePanel ID=”UpdatePanel1″ runat=”server”>
<ContentTemplate>
<div id=”idhoge”> <!– ここに Flash が表示される –>
</div> <!– ここからFlashの表示用のコード –>
<script type=”text/javascript”>
funcswf();
function funcswf() {
swfobject.embedSWF(“img/banner/banner1.swf”, “idhoge”, “468”, “200”, “9.0.0”,”expressInstall.swf”, flashvars, params, attributes);
}
</script>
<asp:Button ID=”Button1″ runat=”server” Text=”Button” />
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
この状態でFormをLoadすると無事Flashは描画されるしかし Button1をクリックしサーバーにPostBackすると 見事消える。サーバー側に
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
ScriptManager.RegisterStartupScript(Me, System.Type.GetType(“System.String”), “flash”, “funcswf();”, True)
End Sub
を加えることでPostBackしてもFlash描画をさせることができた。同じようなことが AC_RunActiveContent.jsを使う方法でも実現可能かと StartupScriptでAC_FL_RunContentをキックしてみたが、残念ながらうまくいかなかった。
UpdatePanel内でFlash描画を行うには やはりswfobjectを使う必要があるようだ。