js子窗体调用父窗体函数的问题详解编程语言

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

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论