------------------------------ASP.Net+Android+IO开发 .Net培训 期待与您交流!------------------------------
先总结下曾今在之前的window.open导致IE自动关闭问题总结[1]中总结到,仅走前台不会导致浏览器的禁止弹出......
但在我们真正开发的时候,不得不走后台怎么办呢? 我就遇到这个问题.
先将自己的解决方法总结下,但我并不承认是多么好的方法,但至少还没有测出什么bug来.
走ajax,但如果在ajax中的success和error中写代码的话,及会造成浏览器的禁止弹出......所以 我稍微走了捷径.
(1)后台自动产生html普通按钮代码
foreach (DataRow dr in dsEmpInfo.Tables["Employee"].Rows)
{
var btnEmp = new System.Web.UI.HtmlControls.HtmlInputButton();//普通按钮
btnEmp.Attributes.Add("id", "");
btnEmp.Attributes.Add("value", "");
btnEmp.Attributes.Add("class", "");
btnEmp.Attributes.Add("onclick", "var result = funSetSession('" + (string)dr["EmpAccount"] + "');if(result) {funOpenUnitFrame('" + (string)dr["EmpAccount"] + "');}else{funReturn();}");
divEmp.Controls.Add(btnEmp);
}
重点代码在加onclick方法:先走funSetSession方法,如果返回true则走funOpenUnitFrame这个方法否则走funReturn
(2)前台funSetSession方法,里面走ajax
function funSetSession(empAccount) {
var result = false;
var ajaxUrl = "EmpLoginPortal.aspx?ajaxMethod=SetEmpAccount&EmpAccount=" + empAccount;
$.ajax({
type: "POST", //提交方式
url: ajaxUrl,
dataType: "text", //类型
async: false,
success: function (data) {
if (data == "SUCCESS") {
result = true;
} else {}
},
error: function () {}
})
return result;
}
(3)funSetSession方法 返回true则window.open,此方法还能保证一直仅弹出一个win
function funOpenUnitFrame(empAccount) {
if (win) {
if (!win.closed) {
win.close();
}
win = window.open(WINDOW_URL, WINDOW_NAME, WINDOW_ATTRS);
} else {
win = window.open("", WINDOW_NAME, WINDOW_ATTRS);
if (win.location.href === "about:blank") {
win = window.open(WINDOW_URL, WINDOW_NAME, WINDOW_ATTRS);
} else {
win.close();
win = window.open(WINDOW_URL, WINDOW_NAME, WINDOW_ATTRS);
}
}
}
(4)funSetSession方法 返回false则返回首页
function funReturn() {
var LoginPortal = './GrandsysLoginPortal.aspx';
window.top.location.replace(LoginPortal);
}
window.open 真心挺讨厌的,貌似<a>的href也可以有window.open的功能,但没研究过......以后有机会总结......
------------------------------ASP.Net+Android+IO开发 .Net培训 期待与您交流!------------------------------