2015-09-09 6 views
0

У меня возникла проблема с window.open и window.opener.someGlobalJavaScriptVariable.window.opener.someGlobalJavaScriptVariable всегда не определено при использовании Chrome v37 +

У меня есть две страницы * .ascx, которые являются родительскими и дочерними страницами. Они расположены в одной папке.

Родительская страница будет вызывать window.open, чтобы отобразить дочернюю страницу под окном. И проблема в том, что window.opener.someGlobalJavaScriptVariable всегда недооценивается на дочерней странице. Я не могу получить ожидаемые аргументы, которые я отправил с родительской страницы.

(я развиваю этот код на Chrome версию 37+, так что я не могу использовать window.showModalDialog в родительской странице и window.dialogArguments детской странице.)

Пожалуйста, помогите мне в этой проблеме. Я действительно не знаю, почему я получил его. Он проводит мой день.

Вот код родительской страницы:

function parentFunction(fileCode) 
{ 
    var args = new Array(); 
    args["fileCode"] = fileCode; 
    var url = "childPage.aspx"; 
    var WinSettings = "center:yes; resizable:yes; dialogWidth:450px; dialogHeight:350px;scrollbars=yes;" 
    var w; 
    var h; 
    var resizable = "no"; 
    var scroll = "no"; 
    var status = "no"; 

    // get the modal specs 
    var mdattrs = WinSettings.split(";"); 
    for (i = 0; i < mdattrs.length; i++) { 
     var mdattr = mdattrs[i].split(":"); 

     var n = mdattr[0]; 
     var v = mdattr[1]; 
     if (n) { n = n.trim().toLowerCase(); } 
     if (v) { v = v.trim().toLowerCase(); } 

     if (n == "dialogheight") { 
      h = v.replace("px", ""); 
     } else if (n == "dialogwidth") { 
      w = v.replace("px", ""); 
     } else if (n == "resizable") { 
      resizable = v; 
     } else if (n == "scroll") { 
      scroll = v; 
     } else if (n == "status") { 
      status = v; 
     } 
    } 

    var left = window.screenX + (window.outerWidth/2) - (w/2); 
    var top = window.screenY + (window.outerHeight/2) - (h/2); 
    args = window.open(url, args, 'toolbar=no, location=no, directories=no, status=' + status + ', menubar=no, scrollbars=' + scroll + ', resizable=' + resizable + ', copyhistory=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); 
} 

И код дочерней страницы (childPage.ascx):

function childFunction() { 
    var args = new Array(); 
    args = window.opener.someGlobalJavaScriptVariable; 
    //args is always undefined at this step 
} 

[UPDATE01] [Обновление новой информации после применения предложения WhiteHat]

Я попытался применить решение, как предложил WhiteHat, и у меня все еще возникла проблема. Мой ожидаемый аргумент все еще не определен на дочерней странице.

Для получения более подробной информации, пожалуйста, ознакомьтесь с кодом на двух страницах.

ParentPage.aspx

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="ParentPage.aspx.vb" Inherits="WebApplication1.ParentPage" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" method="post" runat="server"> 
    <div> 
     <input type="button" onclick="parentFunction('A0');" value="Show Child Page" /> 
    </div> 
    </form> 
    <script type="text/javascript"> 
     function parentFunction(fileCode) { 
      var args = new Array(); 
      args["fileCode"] = fileCode; 
      var url = "childPage.aspx"; 
      var WinSettings = "center:yes; resizable:yes; dialogWidth:450px; dialogHeight:350px;scrollbars=yes;" 
      var w; 
      var h; 
      var resizable = "no"; 
      var scroll = "no"; 
      var status = "no"; 

      // get the modal specs 
      var mdattrs = WinSettings.split(";"); 
      for (i = 0; i < mdattrs.length; i++) { 
       var mdattr = mdattrs[i].split(":"); 

       var n = mdattr[0]; 
       var v = mdattr[1]; 
       if (n) { n = n.trim().toLowerCase(); } 
       if (v) { v = v.trim().toLowerCase(); } 

       if (n == "dialogheight") { 
        h = v.replace("px", ""); 
       } else if (n == "dialogwidth") { 
        w = v.replace("px", ""); 
       } else if (n == "resizable") { 
        resizable = v; 
       } else if (n == "scroll") { 
        scroll = v; 
       } else if (n == "status") { 
        status = v; 
       } 
      } 

      var left = window.screenX + (window.outerWidth/2) - (w/2); 
      var top = window.screenY + (window.outerHeight/2) - (h/2); 
      args = window.open(url, args, 'toolbar=no, location=no, directories=no, status=' + status + ', menubar=no, scrollbars=' + scroll + ', resizable=' + resizable + ', copyhistory=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); 
      var myargs = args; 
      var mynum = 777; 
     } 
    </script> 
</body> 
</html> 

ChildPage.aspx

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="ChildPage.aspx.vb" Inherits="WebApplication1.ChildPage" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="Form1" method="post" runat="server"> 
     <input type="button" onclick="closeWindow();" value="Show args from Parent Page" /> 
    </form> 

    <script type="text/javascript"> 

     function closeWindow() 
     { 
      alert("window.opener.myargs =" + window.opener.myargs); 
      alert("window.opener.mynum =" + window.opener.mynum); 
     } 

    </script> 
</body> 
</html> 

enter image description here enter image description here

ответ

1

Вы не можете передать аргументы window.open

Дело в том, вы определить переменную в J avaScript, а затем просто ссылаться на него по window.opener.yourVariable

Прочитайте этот, последний пост ...

http://forums.asp.net/t/1267365.aspx?window+open+and+window+dialogArguments+in+javascript

+1

Извините за дерьмовый ответ на мой мобильный и не могу понять, как форматировать – WhiteHat

+0

I попробовал применить идею из поста, который вы предлагали, и проблема все еще появляется. Где я ошибаюсь, применяя это? Я обновил дополнительную информацию, пожалуйста, посмотрите мой пост выше, чтобы получить более подробную информацию. –

+1

В родительском объекте определите переменные за пределами области действия функции, я предоставлю лучший пример, как только я получу компьютер ... – WhiteHat

 Смежные вопросы

  • Нет связанных вопросов^_^