国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

iframe與主框架跨域相互訪問實現方法

2019-11-19 15:26:28
字體:
來源:轉載
供稿:網友

1.同域相互訪問

假設A.html 與 b.html domain都是localhost (同域)
A.html中iframe 嵌入 B.html,name=myframe
A.html有js function fMain()
B.html有js function fIframe()
需要實現 A.html 調用 B.html 的 fIframe(),B.html 調用 A.html 的 fMain()

A.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title> main window </title> <script type="text/javascript"> // main js function function fMain(){	alert('main function execute success'); } // exec iframe function function exec_iframe(){	window.myframe.fIframe(); } </script> </head> <body> <p>A.html main</p> <p><input type="button" value="exec iframe function" onclick="exec_iframe()"></p> <iframe src="B.html" name="myframe" width="500" height="100"></iframe> </body></html>

B.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title> iframe window </title> <script type="text/javascript"> // iframe js function  function fIframe(){	alert('iframe function execute success'); } // exec main function function exec_main(){	parent.fMain(); } </script> </head> <body> <p>B.html iframe</p> <p><input type="button" value="exec main function" onclick="exec_main()"></p> </body></html>

點擊A.html 的 exec iframe function button,執行成功,彈出iframe function execute success。如下圖

點擊B.html 的 exec main function button,執行成功,彈出 main function execute success。如下圖

2.跨域互相訪問

假設 A.html domain是 localhost, B.html domain 是 127.0.0.1 (跨域)
這里使用 localhost 與 127.0.0.1 只是方便測試,localhost 與 127.0.0.1已經不同一個域,因此執行效果是一樣的。
實際使用時換成 www.domaina.com 與 www.domainb.com 即可。
A.html中iframe 嵌入 B.html,name=myframe
A.html有js function fMain()
B.html有js function fIframe()
需要實現 A.html 調用 B.html 的 fIframe(),B.html 調用 A.html 的 fMain() (跨域調用)

如果使用上面同域的方法,瀏覽器判斷A.html 與 B.html 不同域,會有錯誤提示。
Uncaught SecurityError: Blocked a frame with origin "http://localhost" from accessing a frame with origin "http://127.0.0.1". Protocols, domains, and ports must match.

實現原理:

因為瀏覽器為了安全,禁止了不同域訪問。因此只要調用與執行的雙方是同域則可以相互訪問。

首先,A.html 如何調用B.html的 fIframe方法
1.在A.html 創建一個 iframe
2.iframe的頁面放在 B.html 同域下,命名為execB.html
3.execB.html 里有調用B.html fIframe方法的js調用

<script type="text/javascript"> parent.window.myframe.fIframe(); // execute parent myframe fIframe function </script> 

這樣A.html 就能通過 execB.html 調用 B.html 的 fIframe 方法了。

同理,B.html 需要調用A.html fMain方法,需要在B.html 嵌入與A.html 同域的 execA.html
execA.html 里有調用 A.html fMain 方法的js 調用

<script type="text/javascript"> parent.parent.fMain(); // execute main function </script> 

這樣就能實現 A.html 與 B.html 跨域相互調用。

A.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title> main window </title> <script type="text/javascript"> // main js function function fMain(){	alert('main function execute success'); } // exec iframe function function exec_iframe(){	if(typeof(exec_obj)=='undefined'){		exec_obj = document.createElement('iframe');		exec_obj.name = 'tmp_frame';		exec_obj.src = 'http://127.0.0.1/execB.html';		exec_obj.style.display = 'none';		document.body.appendChild(exec_obj);	}else{		exec_obj.src = 'http://127.0.0.1/execB.html?' + Math.random();	} } </script> </head> <body> <p>A.html main</p> <p><input type="button" value="exec iframe function" onclick="exec_iframe()"></p> <iframe src="http://127.0.0.1/B.html" name="myframe" width="500" height="100"></iframe> </body></html>

B.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title> iframe window </title> <script type="text/javascript"> // iframe js function  function fIframe(){	alert('iframe function execute success'); } // exec main function function exec_main(){	if(typeof(exec_obj)=='undefined'){		exec_obj = document.createElement('iframe');		exec_obj.name = 'tmp_frame';		exec_obj.src = 'http://localhost/execA.html';		exec_obj.style.display = 'none';		document.body.appendChild(exec_obj);	}else{		exec_obj.src = 'http://localhost/execA.html?' + Math.random();	} } </script> </head> <body> <p>B.html iframe</p> <p><input type="button" value="exec main function" onclick="exec_main()"></p> </body></html>

execA.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title> exec main function </title> </head> <body> 	<script type="text/javascript">		parent.parent.fMain(); // execute main function	</script> </body></html>

execB.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title> exec iframe function </title> </head> <body>	<script type="text/javascript">		parent.window.myframe.fIframe(); // execute parent myframe fIframe function	</script> </body></html>

執行如下圖:

源碼下載地址:點擊查看

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 田阳县| 永吉县| 建始县| 江北区| 西贡区| 高平市| 波密县| 南昌市| 布拖县| 博爱县| 高雄县| 上蔡县| 台州市| 罗田县| 新蔡县| 扶余县| 南开区| 海淀区| 仲巴县| 宝丰县| 晋江市| 尼木县| 利津县| 辽宁省| 长顺县| 峨山| 开封市| 剑河县| 志丹县| 保德县| 嘉兴市| 安泽县| 南昌市| 临武县| 红桥区| 化州市| 凌源市| 盐边县| 松江区| 长宁县| 荔波县|