iFrame 内の UpdatePanel 内から javascript を呼び出す際に問題が発生しました。parent.functionName() を使用して、iFrame 内から問題なく親ページの JavaScript を呼び出すことができます。
これは、私の pageName.aspx.cs 内にあります。(KP によるコード ( ASP.Net - AJAX UpdatePanel 内の Javascript ))
protected override void Page_Load(object sender, EventArgs e)
{
base.Page_Load(sender, e);
StringBuilder scriptStringB = new StringBuilder();
scriptStringB.Append("<script type=\"text/javascript\">");
scriptStringB.Append("function CloseiFrame() {");
scriptStringB.Append(" alert(\"CloseiFrame\");");
scriptStringB.Append(" CloseiFrameThroughParent();");
scriptStringB.Append("}");
scriptStringB.Append("</script>");
RegisterClientStartupScript("CloseiFrame", scriptStringB.ToString());
}
private void RegisterClientStartupScript(string scriptKey, string scriptText)
{
ScriptManager sManager = ScriptManager.GetCurrent(this.Page);
if (sManager != null && sManager.IsInAsyncPostBack)
{
//if a MS AJAX request, use the Scriptmanager class
ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), scriptKey, scriptText, false);
}
else
{
//if a standard postback, use the standard ClientScript method
scriptText = string.Concat("Sys.Application.add_load(function(){", scriptText, "});");
this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), scriptKey, scriptText, false);
}
}
たとえば、Microsoftの方法(http://msdn.microsoft.com/en-us/library/z9h4dk8y.aspx )を使用して、他の方法を試しました。
pageName.aspx では、次のようになります。
<form id="Form1" class="iFrameForm" method="post" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
...Scripts are included here
</Scripts>
</asp:ScriptManager>
<asp:UpdatePanel runat="server" id="UpdatePanel" updatemode="Conditional">
<ContentTemplate>
<asp:imagebutton id="ExitButton" runat="server"
ImageUrl="~/exit.png"
AlternateText="<%$ Resources:Resource, Exit %>" ToolTip="<%$ Resources:Resource, Exit %>" OnClick="Exit_Click" >
</asp:imagebutton>
</ContentTemplate>
</asp:UpdatePanel>
</form>
もちろん他にもありますが、基本は以上です。ボタンが生成され、フォーム「アクション」の最後に「jscriptfunction=CloseiFrame」が含まれます。
しかし、呼び出されている関数は言うまでもなく、アラートはありません。もちろん、サービスを使用してこれらすべてを回避することもできますが、ページと JavaScript 内でこの問題を解決したいと考えています。