熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

js操作iframe兼容各種主流浏覽器示例代碼

2013-11-15 11:58:26  來源: JSP教程 
遇到了操作iframe的相關問題其實就是在操作iframe內部某個窗體時調用父窗體的一個函數下面與大家分享下操作iframe兼容各種浏覽器的方法  

  在做項目時遇到了操作iframe的相關問題業務很簡單其實就是在操作iframe內部某個窗體時調用父窗體的一個函數於是就寫了兩個很簡單的htm頁面用來測試使用網上流行的方法在谷歌浏覽器中始終報錯不能通過
父頁面parenthtml的代碼如下

復制代碼 代碼如下:
<html xmlns="
<head><title>
</title>
<script src="jqueryminjs" type="text/javascript"></script>
<script type="text/javascript">
function ParentFunction() {
alert(ParentFunction);
}
</script></head>
<body>
<input type="button" id="btnCancel" class="button" value="測試" />
<iframe id="FRMdetail" name="FRMdetail" frameborder="" src=childhtml style="width:%;height:%;" ></iframe>
</body>
</html>

  
子頁面childhtml的代碼如下

復制代碼 代碼如下:
<html xmlns="
<head><title>
</title>
<script src="jqueryminjs" type="text/javascript"></script>
<script type="text/javascript">
$(document)ready(function () {
$("#btnTest")click(function (e) {
var t=windowparent;
tParentFunction();
});
})
</script></head>
<body>
<input type="button" id="btnTest" class="button" value="應該獲取的值" />rrr
</body>
</html>

  
網絡上流行的方法 var t=windowparent; tParentFunction();在IE中能調用可是在谷歌浏覽器中總是提示如下錯誤
Blocked a frame with origin "null" from accessing a frame with origin "null" Protocols domains and ports must match
網上找了很長時間都沒法發現方法有的也是很早以前的版本基本上沒用了而且人雲亦雲基本上沒有測試過於是自己摸索後來才發現谷歌浏覽器其實那種方法其實也可以只是很奇怪必須發布後才可以在文件系統中調用就會出現上邊的錯誤
其實還有一種html的方法postMessage於是就根據著進行了改寫最終代碼如下
父頁面parenthtml的代碼如下

復制代碼 代碼如下:
<html xmlns="
<head><title>
</title>
<script src="jqueryminjs" type="text/javascript"></script>
<script type="text/javascript">
thisParentFunction= function() {//和注釋掉的方法是一樣的也就是說加不加this都是一樣的因為此處的this就是windows
alert(ParentFunction);
}
// function ParentFunction() {
// alert(ParentFunction);
// }
function receiveMessage(e) {
var data = edata;
if(data=="ParentFunction")
{
ParentFunction() ;
}
}
if (typeof windowaddEventListener != undefined) {//使用html 的postMessage必須處理的
windowaddEventListener(message receiveMessage false);
} else if (typeof windowattachEvent != undefined) {
windowattachEvent(onmessage receiveMessage);
}
</script></head>
<body>
<input type="button" id="btnCancel" class="button" value="測試" />
<iframe id="FRMdetail" name="FRMdetail" frameborder="" src=childhtml style="width:%;height:%;" ></iframe>
</body>
</html>

  
子頁面childhtml的代碼如下

復制代碼 代碼如下:
<html xmlns="
<head><title>
</title>
<script src="jqueryminjs" type="text/javascript"></script>
<script type="text/javascript">
$(document)ready(function () {
$("#btnTest")click(function (e) {
var t=windowparent;
if(!tParentFunction)//在不支持時使用html 的postMessage方法
{
tpostMessage("ParentFunction" *);
}
else
{
tParentFunction();
}
});
})
</script></head>
<body>
<input type="button" id="btnTest" class="button" value="應該獲取的值" />rrr
</body>
</html>

  
經過改寫後在文件系統中雖然也會出現那個錯誤但需要調用的方法確實調用了目的確實達到了不影響使用了


From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19998.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.