window.showmodaldialog无法使用chrome
我正在为我的项目使用VS2010 Express版。
我创建了一个注册表单,其中有“提交”按钮,这将打开新窗口(子窗口)。
它包含aspx按钮()。
子窗口再次包含一个由我们填写的表单,在单击“保存”按钮后,该表单将被保存,如果我们关闭子窗口,则在保存之后,将提交注册表单。
页面加载包含一个调用javascript的函数。
SetJavaScript(); if (Session["IsSuccess"] != null) if (Session["IsSuccess"].ToString().ToLower() == "success") TextBox1.Text = Session["IsSuccess"].ToString(); if (ddlTicketType.SelectedValue.ToString().ToLower() == "cr") btnSubmit.Attributes.Add("OnClick", "OpenChild(); "); if (ddlTicketType.SelectedValue.ToString().ToLower() == "pr")
btnSubmit.Attributes.Add(“OnClick”,“clickno();”);
由于window.showmodaldialog不适用于chrome。 我也使用了window.open但它也没有正常工作,因为它打开子表单并在关闭它之后输入错误消息“请填写表单”。 下面是在页面加载时调用的javascript代码。
private void SetJavaScript() { string str_Script = ""; str_Script += ""; str_Script += "function OpenChild() "; str_Script += "{ CheckValidation();"; str_Script += "var varx = document.getElementById('TextBox1').value;"; str_Script += "if (varx== 'yes'){"; str_Script += "var ParmA = '2';"; str_Script += "var MyArgs = new Array(ParmA);"; str_Script += "if (ParmA=='2'){"; str_Script += "var WinSettings = 'center:yes;resizable:yes;dialogheight:800px;dialogwidth:1000px';"; str_Script += "MyArgs = window.showModalDialog('user/cr1.aspx', MyArgs, WinSettings);"; str_Script += "if (MyArgs == null)"; str_Script += "{"; str_Script += "}"; str_Script += "else"; str_Script += "{"; str_Script += "document.getElementById('TextBox1').value =MyArgs[0].toString();"; str_Script += "}"; str_Script += "}}"; str_Script += " "; this.Page.RegisterStartupScript("Reconnect", str_Script);
}
请帮助我让它再次正常工作,因为它在Chrome更新之前工作得非常好。 请让我知道任何可以解决它的好方法。
正如您在此处所述 ,不推荐使用Window.showModalDialog(),Chrome不再支持版本37,并且已从版本43中完全删除。
使用Bootstrap Modal代替,或者,如果太昂贵无法更改,请尝试使用此库 ,即window.showModalDialog polyfill
我们在许多传统的asp应用程序上遇到此问题。 我找到了至少3种不同的方法,但我认为可以解决问题的方法更简单。 它非常适合修复经典的asp页面,但也适用于.Net环境。 这是方法的伪代码:
在调用表单中javascript:
var chrome_pop_up_window = null; //global for next few functions function uploadChromeFinished(parameters) { //do something with parameters if(chrome_pop_up_window != null) { chrome_pop_up_window.close(); chrome_pop_up_window = null; } } function OpenChild() { if(!window.showModalDialog) chrome_pop_up_window = window.open(url, "_blank", other_settings); else { var result = showModalDialog(...); } }
然后在子页面中,我准备好了一个文件,知道是关闭窗口模式还是调用开启器的function。 “开启者”是打开弹出窗口的页面。 对于.net,我建议回帖设置隐藏变量,让页面知道它已完成。
if(document.getElementById("am_I_finished").value = 'true') { window.opener.uploadChromeFinished(parameters_if_needed); else { window.dialogArguments.something = some_value_if_needed; window.returnValue = true; //or false windlow.close(); }
然后最终结果是弹出窗口无论是在Chrome还是IE中都会被打开,并且孩子可以在关闭Chrome或IE时将信息传回给父母,尽管在Chrome的情况下,父母在获得参数后实际关闭了孩子来自孩子的价值观。 无需插件或json。