2009-08-21 8 views
0

子ウィンドウから親ウィンドウに文字列を返そうとしているASP.NET 3.5 Webアプリケーションがあります。 FF、Chrome、Safariで動作しますが、IEは別の話です。 IEでは、初めて動作しますが、子を再度開き、別の文字列を渡すと、親ページはPostBackの途中でハングします。親ウィンドウのASCXについてはIEが2回目にハングアップするJavaScriptを使用して親ウィンドウに値が渡される

、私は次のようしている:

<script type="text/javascript"> 
    function openMediaManager() { 
     // This is called to open the child window. 
     window.open('/mediamanager.aspx', 'mediamanager', 'width=685, height=530'); 
    } 

    function setImagePath(img) { 
     // This is called by the child window to pass the string to the parent. 
     <asp:Literal ID="NewImgPostBack" runat="server" /> 
    } 
</script> 

と__doPostBack()の呼び出しを生成するための背後にあるコードからの抜粋:子ASCXで

protected override void Render(HtmlTextWriter writer) 
{ 
    // Not using the Button's OnClick because I have to use FindControl() to get the button. 
    string postBack = Page.ClientScript 
     .GetPostBackEventReference(MediaManagerButton, string.Empty) 
      .Replace("''", "{0}"); 

    NewImgPostBack.Text = string.Format(postBack, "img"); 

    base.Render(writer); 
} 

を、私はファイルへのパスを含む次の関数を呼び出しています(例: "/image.png"):

<script type="text/javascript"> 
    function sendValueToParent(path) { 
     // Called by the child to pass a string (path to an image) to the parent. 
     window.opener.setImagePath(path); 
     window.close(); 
    } 
</script> 

任意これはなぜIEでのみハングアップするアイデアですか?私はIE 7を使用していますが、私はIE 6でも同じ問題を読んでいます(ほとんどのエンドユーザーがそうします)。

同様の問題への参照: Why does Internet Explorer 7 hang bizarrely when child window scripts the parent window to submit?

EDIT

ページをIEでハングしているようですしながら、私は(子供が既に閉じられている)親のソースを表示した場合、私は以下を参照してください。 :

<!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><title>title 
</title><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link id="ctl00_SiteStyle" rel="stylesheet" type="text/css" href="/App_Themes/20/css/a.css?v=3.0.0.1" /> 

    <script type="text/javascript" src="/javascript/_common.js"></script> 

    <script type="text/javascript" src="/javascript/_calendar.js"></script> 
</head> 
<body> 
    <form name="aspnetForm" method="post" action="/home.aspx" id="aspnetForm"> 
    <div> 
    <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> 
    <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> 
    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJMTY1ODQ0NjQxD2QWAmYPZBYEAgEPZBYCAgMPFgIeBGhyZWYFJy9BcHBfVGhlbWVzL1NCMjAvY3NzL2FtbGkuY3NzP3Y9My4wLjAuMWQCAw9kFgoCAQ9kFgYCAQ8PFgQeBFRleHQFCURFViBMb2dpbh4HVmlzaWJsZWhkZAIDDw8WBh8BBQhIVFRQIEdFVB4LTmF2aWdhdGVVcmwFCi9ob21lLmFzcHgfAmdkZAIFDw8WBB8BBQZMb2cgSW4fAmhkZAIFD2QWBAIDD2QWAgIBD2QWCGYPDxYCHwJnZBYEZg8PFgYeCEltYWdlVXJsBR8vaW1hZ2VzL2Ntc2ljb25zL2VkaXRfc21hbGwucG5nHghDc3NDbGFzcwURQ01TRWRpdE1lbnVfSW1hZ2UeBF8hU0ICAhYCHgtvbm1vdXNlb3ZlcgUzZGlzcGxheU1lbnUoJ2N0bDAwX0NvbnRlbnRNYWluX2N0bDAxX2N0bDAwX2N0bDAxJyk7ZAIBDw8WBB8FBRRDTVNFZGl0TWVudV9NYWluTWVudR8GAgIWBB8HBRVkaXNwbGF5TWVudSh0aGlzLmlkKTseCm9ubW91c2VvdXQFEmhpZGVNZW51KHRoaXMuaWQpOxYOZg8PFgQfBQUaQ01TRWRpdE1lbnVfTWVudUl0ZW1CdXR0b24fBgICFgQfBwUXdGhpcy5vZmZzZXRQYXJlbnQubW89MTsfCAUXdGhpcy5vZmZzZXRQYXJlbnQubW89MDsWAmYPDxYEHwUFGUNNU0VkaXRNZW51X01lbnVJdGVtUGFuZWwfBgICFgQfBwUadGhpcy5jbGFzc05hbWU9J01JUEhvdmVyJzsfCAUSdGhpcy5jbGFzc05hbWU9Jyc7FgRmDw8WBh8EBSMvaW1hZ2VzL2Ntc2ljb25zL2VkaXRtb2RlX3NtYWxsLnBuZx8FBRlDTVNFZGl0TWVudV9NZW51SXRlbUltYWdlHwYCAmRkAgEPDxYGHwEFBEVkaXQfBQUYQ01TRWRpdE1lbnVfTWVudUl0ZW1UZXh0HwYCAmRkAgEPDxYEHwUFGkNNU0VkaXRNZW51X01lbnVJdGVtQnV0dG9uHwYCAhYEHwcFF3RoaXMub2Zmc2V0UGFyZW50Lm1vPTE7HwgFF3RoaXMub2Zmc2V0UGFyZW50Lm1vPTA7FgJmDw8WBB8FBRlDTVNFZGl0TWVudV9NZW51SXRlbVBhbmVsHwYCAhYEHwcFGnRoaXMuY2xhc3NOYW1lPSdNSVBIb3Zlcic7HwgFEnRoaXMuY2xhc3NOYW1lPScnOxYEZg8PFgYfBAUmL2ltYWdlcy9jbXNpY29ucy9kaXNwbGF5bW9kZV9zbWFsbC5wbmcfBQUZQ01TRWRpdE1lbnVfTWVudUl0ZW1JbWFnZR8GAgJkZAIBDw8WBh8BBQdEaXNwbGF5HwUFGENNU0VkaXRNZW51X01lbnVJdGVtVGV4dB8GAgJkZAIDDw8WBB8FBRpDTVNFZGl0TWVudV9NZW51SXRlbUJ1dHRvbh8GAgIWBB8HBRd0aGlzLm9mZnNldFBhcmVudC5tbz0xOx8IBRd0aGlzLm9mZnNldFBhcmVudC5tbz0wOxYCZg8PFgQfBQUZQ01TRWRpdE1lbnVfTWVudUl0ZW1QYW5lbB8GAgIWBB8HBRp0aGlzLmNsYXNzTmFtZT0nTUlQSG92ZXInOx8IBRJ0aGlzLmNsYXNzTmFtZT0nJzsWBGYPDxYGHwQFHy9pbWFnZXMvY21zaWNvbnMvdW5kb19zbWFsbC5wbmcfBQUZQ01TRWRpdE1lbnVfTWVudUl0ZW1JbWFnZR8GAgJkZAIBDw8WBh8BBQRVbmRvHwUFGENNU0VkaXRNZW51X01lbnVJdGVtVGV4dB8GAgJkZAIFDw8WBB8FBRpDTVNFZGl0TWVudV9NZW51SXRlbUJ1dHRvbh8GAgIWBB8HBRd0aGlzLm9mZnNldFBhcmVudC5tbz0xOx8IBRd0aGlzLm9mZnNldFBhcmVudC5tbz0wOxYCZg8PFgQfBQUZQ01TRWRpdE1lbnVfTWVudUl0ZW1QYW5lbB8GAgIWBB8HBRp0aGlzLmNsYXNzTmFtZT0nTUlQSG92ZXInOx8IBRJ0aGlzLmNsYXNzTmFtZT0nJzsWBGYPDxYGHwQFIS9pbWFnZXMvY21zaWNvbnMvcmVtb3ZlX3NtYWxsLnBuZx8FBRlDTVNFZGl0TWVudV9NZW51SXRlbUltYWdlHwYCAmRkAgEPDxYGHwEFBlJlbW92ZR8FBRhDTVNFZGl0TWVudV9NZW51SXRlbVRleHQfBgICZGQCBg8PFgQfBQUaQ01TRWRpdE1lbnVfTWVudUl0ZW1CdXR0b24fBgICFgQfBwUXdGhpcy5vZmZzZXRQYXJlbnQubW89MTsfCAUXdGhpcy5vZmZzZXRQYXJlbnQubW89MDsWAmYPDxYEHwUFGUNNU0VkaXRNZW51X01lbnVJdGVtUGFuZWwfBgICFgQfBwUadGhpcy5jbGFzc05hbWU9J01JUEhvdmVyJzsfCAUSdGhpcy5jbGFzc05hbWU9Jyc7FgRmDw8WBh8EBSEvaW1hZ2VzL2Ntc2ljb25zL2luc2VydF9zbWFsbC5wbmcfBQUZQ01TRWRpdE1lbnVfTWVudUl0ZW1JbWFnZR8GAgJkZAIBDw8WBh8BBQZJbnNlcnQfBQUYQ01TRWRpdE1lbnVfTWVudUl0ZW1UZXh0HwYCAmRkAggPDxYEHwUFGkNNU0VkaXRNZW51X01lbnVJdGVtQnV0dG9uHwYCAhYEHwcFF3RoaXMub2Zmc2V0UGFyZW50Lm1vPTE7HwgFF3RoaXMub2Zmc2V0UGFyZW50Lm1vPTA7FgJmDw8WBB8FBRlDTVNFZGl0TWVudV9NZW51SXRlbVBhbmVsHwYCAhYEHwcFGnRoaXMuY2xhc3NOYW1lPSdNSVBIb3Zlcic7HwgFEnRoaXMuY2xhc3NOYW1lPScnOxYEZg8PFgYfBAUfL2ltYWdlcy9jbXNpY29ucy9z 

(終了)

は、あなたと思いますかこれはViewStateの問題かもしれませんか? IEのウィンドウを開いたままにすると、約5分後にタイムアウトしてスタイリングのないページが読み込まれることがあります。

答えて

0

そのわずか推測 - 多分開幕戦でウィンドウへの参照を維持してみてください。そして、

var mediaMan; 
function openMediaManager() { 
    // This is called to open the child window. 
    if (mediaMan) 
     alert("already open!"); 
    else 
     mediaMan = window.open('/mediamanager.aspx', '', 'width=685, height=530'); 
} 

と、代わりのsendValueToParentでウィンドウを閉じる、setImagePathでそれを閉じ

function setImagePath(path) { 
    // do whatever 
    if (mediaMan) 
    { 
    mediaMan.close(); 
    mediaMan = null; 
    } 
} 

私はしばしば、別のアプローチを使用していることがわかります。つまり、このような問題が見つかった場合です。この方法を使用すると、1つのmediamangerがすでに開いているかどうかを確認することもできます(したがって、ウィンドウに名前を付ける必要がなくなり、Webページの2つのインスタンスを他のものと干渉することなく許可する)。

+0

良い考えですが、同じ結果です。 – Aaron

+0

あなたは正確にそれがハングするか知っていますか? close()の前に警告を追加してみてください。それともsetImagePath()にイベントが届かないのですか? – Niko

+0

setImagePath()に到達していて、close()もヒットしています。それはサーバー側でハングアップするようだ...?私はハングアップについていくつかの詳細を与えるために質問を編集しました。 – Aaron