子ポップアップ ウィンドウ間で window.opener 値を転送するのに問題があります。このコードは IE 8 以降で動作しますが、IE 9 以降では動作しません。どんな入力でも大歓迎です。
別の方法で説明しました。姉は私が兄であることを知っていますが、両親が誰であるかを私が言うことを信用していません。
プロセス フロー:
親ウィンドウ (メイン フォーム) -> ポップアップ ウィンドウ (PopUp 1)を開く ユーザーが
PopUp
1 のボタンをクリックして、
PopUp 2 を開きます
。ポップアップ 2。
ポップアップ 2 は、元の親「メイン フォーム」のデータを更新します。その後、閉じます。
最後のステップは、IE 9 に問題がないステップです。以下のサンプルを作成して、純粋な JavaScript を使用して機能が動作することを示しますが、ポストバックして RegisterStartupScript を使用して JavaScript 関数を呼び出すと失敗します。RegisterStartupScript を使用しているのは、フォームの保存アクションがユーザーの入力に基づいてさまざまな結果をもたらすためです。
すべてのページは同じドメインにあります。
MainForm.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="MainForm.aspx.vb" Inherits="MainForm" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript">
function OpenPopUp() {
document.getElementById('lblStatus').innerHTML = '';
window.open('PopUp1.aspx', '',
'width=750,left=' + ((screen.width / 2) - 375) + ',top=' + ((screen.height / 2) - 250) +
',height=500,location=no,menubar=no,status=yes,scrollbars=yes,toolbar=no,resizable=yes');
}
function Refresh() {
document.getElementById('lblStatus').innerHTML = 'It Worked';
}
</script>
</head>
<body>
<form id="form1" runat="server">
<input type="button" id="btnOpen" value="Open Popup" style="width: 110px" onclick="OpenPopUp()" />
<br /><br />
<asp:Label ID="lblStatus" runat="server"></asp:Label>
</form>
</body>
</html>
PopUp1.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="PopUp1.aspx.vb" Inherits="PopUp1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
<script type="text/javascript">
function OpenPopUp2() {
window.open('PopUp2.aspx', '', 'width=700,left=' + ((screen.width / 2) - 350) + ',top=' +
((screen.height / 2) - 275) + ',height=550,location=no,status=yes,toolbar=no,resizable=no,scrollbars=yes');
}
</script>
</head>
<body>
<h1>This is pop up 1</h1>
<form id="form1" runat="server">
<asp:TextBox ID="txtPop1" runat="server" Text="test 1" ></asp:TextBox>
<input type="button" id="btnOpen" value="Open Popup 2" style="width: 110px" onclick="OpenPopUp2()" />
</form>
</body>
</html>
PopUp2.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="PopUp2.aspx.vb" Inherits="PopUp2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript">
function GrabData() {
var oParentDoc = window.opener.document;
if (oParentDoc != null) {
try { document.getElementById('txtPop2').value = oParentDoc.getElementById('txtPop1').value; } catch (ex1) { }
}
var oParentOpener = window.opener.opener;
window.opener.close();
window.opener = oParentOpener;
}
function MyClose() {
window.opener.Refresh();
window.close();
}
</script>
</head>
<body>
<h1>This is pop up 2</h1>
<form id="form1" runat="server">
<asp:TextBox ID="txtPop2" runat="server" ></asp:TextBox>
<input type="button" id="btnSave1" value="Save Working" style="width: 110px" onclick="MyClose()" />
<asp:Button ID="btnSave" runat="server" Text="Save Not Working" />
</form>
</body>
</html>
PopUp2.aspx.vb
Partial Class PopUp2
Inherits System.Web.UI.Page
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack() Then
ClientScript.RegisterStartupScript(Type.GetType("System.String"), "Refresh", _
"<script type=""text/javascript"">GrabData();</script>")
End If
End Sub
Protected Sub btnSave_Click(sender As Object, e As System.EventArgs) Handles btnSave.Click
ScriptManager.RegisterStartupScript(Me, Me.GetType(), "RestoreFilter", _
"<script type=""text/javascript"">MyClose();</script>", False)
End Sub
End Class