在很早之前写过一篇关于子窗体调用父窗体的函数问题,js操作iframe兼容各种浏览器在使用了很多次发现了一些问题。因此想到了一些改进的方法。
其实可以使用查询字符串传递函数巧妙的解决这个问题。
例如:
可以在父窗体FileAuthorityList.aspx这个页面中打开子窗体AuthorityDetail.aspx,并传递参数例如 var url = “AuthorityDetail.aspx?CalBack=afterUpdate&id=id”;
然后在子窗体中AuthorityDetail.aspx中获取查询字符串,获取到需要调用的函数afterUpdate,这样就可以根据传递查询字符串的不同调用不同父窗体的函数,在调试时也不会有脚本错误,灵活性也更高。在调用父窗体的函数时,传递不同的参数就更灵活的使用AuthorityDetail.aspx。
例如:
子窗体的核心js
var CalBackFunction = QueryString("CalBack"); //
function Case1() {
if (CalBackFunction) {
var t = window.parent;
if (t[CalBackFunction]) {
t[CalBackFunction](false);
}
}
}
function Case2() {
if (CalBackFunction) {
var t = window.parent;
if (t[CalBackFunction]) {
t[CalBackFunction](true);
}
}
}
function Case3(fileid, filename) {
if (CalBackFunction) {
var t = window.parent;
if (t[CalBackFunction]) {
t[CalBackFunction](true, fileid, filename);
}
}
}
//提取查询字符
function QueryString(name) {
var sURL = window.location.search;
var re = new RegExp("[&?]" + name + "=([^&?]+)", "ig"); ;
var result = re.exec(sURL);
if (result) {
var temp = result[0].split('=');
return temp[1];
} else {
return "";
}
}
父窗体代码:
function afterUpdate(shouldUpdate, fileid, fileName)
{
if (shouldUpdate)
{
if (fileid && fileName)//对应Case3
{
}
else {//对应Case2
}
}
else {//对应Case1()
}
}
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/11222.html