在很早之前写过一篇关于子窗体调用父窗体的函数问题,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/11222.html