導航:首頁 > 編程語言 > iframe跨域調用js對象

iframe跨域調用js對象

發布時間:2024-11-23 14:59:59

① 如何用javascript 跨域獲取iframe子頁面的元素信息

跨域的話想用父頁面的js獲取iframe里的元素是不可能的。
用chrome擴展程序的話是可以的。

② js如何操作iframe的跨域問題

A域名下的頁面index.htm中內嵌了一個iframe頁面,iframe內引用的是B域名的sub-index.htm頁面,但是為了避免出
現在index.htm頁面中出現滾動條,需要明確知道sub-index.htm頁面的高度和寬度,可是sub-index.htm的頁面內容是不可控的,可能會根據不同用戶頁面大小會不一樣;問題就是如何把sub-index.htm頁面的高度和寬度傳遞給index.htm頁面?

具體解決:
1、在index.htm頁面中聲明一個js函數process(height, width);用來實現設置頁面內iframe的高度和寬度;
2、
在sub-index.htm頁面中再內嵌一個隱藏的iframe,iframe的src指向A域名下的頁面ex.htm?height=xx&
width=yy,該頁面沒有任何內容,只是用來傳遞sub-index.htm頁面載入完之後的寬度和高度這兩個數據的,頁面內js拿到request
中的參數之後直接調用parent.parent.process(height, width);完成對父頁面寬度和高度的設置;
如圖:

③ 主頁面怎麼調用iframe里的javascript方法

如果是同一個域,iframe可以調用父窗口的js方法。如果
是父窗口調用子窗口內部的方法。不論跨不跨域,都不能調用。
解決辦法:H5提供的消息機制。支持跨域。

在iframe窗口的js代碼中,監聽事件:
window.onmessage=function(e){
//e.data--接收到的字元串。
//e.source---發送窗口所在的域。
//e.orgin--發送窗口的代理對象。
}
在主頁面窗口中,發送消息。
window.postMessage("字元串","域");
//其中的域是指iframe所在網站的域名。如果為*表示不校驗校驗域名。

④ javascript 能否調用到iframe標簽包含頁面中的函數

可以的。只要兩個頁面有一定的關系,無論是通過iframe,還是frameset,甚至是window.open,超鏈接等等方式,都可以讓兩個頁面之間的js互相調用。注意,是互相調用,也就是說,兩者誰都有辦法調用另一個的js代碼。


當然有前提,前提就是兩個頁面都是你自己的頁面,是在同一個域下面的,否則牽扯跨域問題,就比較麻煩了。


互相調用的關鍵是獲取另一方的window對象。通常頁面中window對象就是window,直接使用。但通過某種關系的另一個頁面的window就需要通過別的方式獲取了。以iframe為例,跨域通過普通節點獲取的方式得到iframe節點,比如iframe節點id為ifr,則:

varifr=document.getElementById('ifr');
varwin=ifr.window||ifr.contentWindow;//考慮兼容性問題

這里獲取到的win,就對應普通頁面的window。要操作這個框架頁面,就可以通過這個win進行操作了。比如獲取框架頁面的文檔對象win.document,到了這一步,剩下的就和普通頁面沒有區別了。


要獲取通過window.open打開的頁面的window引用就更簡單了:

varwin=window.open(url);//這個函數還有其它知識點,請自行搜索

而要在window.open打開的頁面中獲取父頁面的window,也就是打開該頁面的頁面的window,也很簡單:

varwin=window.opener;//表示打開本window的那個頁面的window


獲取到另一個頁面的window引用後,實際上另一個頁面的很多控制權就拿到了。你可以通過獲取到的window隨意修改另一個頁面了。比如要調用iframe中的a函數,就可以這樣:

varifr=document.getElementById('ifr');
varwin=ifr.window||ifr.contentWindow;
win.a();//調用iframe中的a函數

⑤ iframe通信和跨域通信總結

討論小車實現兩個頁面通信,使用iframe標簽。同域下,父頁面通過FrameName.window.childMethod()調用子頁面方法,子頁面響應parent.window.parentMethod()。獲取DOM元素,先確保iframe載入完成,使用onload事件或document.readyState=="complete"判斷。跨域通信則利用location對象的hash值傳遞數據。在父頁面設置src後加data字元串,子頁面通過監聽location.href變化,獲取數據進行處理。子頁面向父頁面傳遞數據,藉助代理iframe,它和父頁面保持同域,利用同域通信方式,通過window.top或window.parent.parent獲取數據。實現細節參考js之iframe子頁面與父頁面通信。

⑥ javascript 跨域調用js文件問題.....

三種方法實現js跨域訪問

1.基於iframe實現跨域

基於iframe實現的跨域要求兩個域具有aa.xx.com,bb.xx.com這種特點,也就是兩個頁面必須屬於一個基礎域(例如都是xxx.com,或是xxx.com.cn),使用同一協議(例如都是 http)和同一埠(例如都是80),這樣在兩個頁面中同時添加document.domain,就可以實現父頁面調用子頁面的函數,代碼如下:

頁面一代碼:
<html>
<head>
<script>
document.domain="xx.com";
functionaa(){
alert("p");
}
</script>
</head>
<body>
<iframesrc="http://localhost:8080/cmsui/2.html"id="i">

</iframe>
<script>
document.getelementbyid('i').oncg=function(){
vard=document.getelementbyid('i').contentwindow;
d.a();

};
</script>
</body>
</html>
頁面二代碼:
<html>
<head>
<script>
document.domain="xx.com";
functiona(){
alert("c");
}
</script>
</head>
<body>
</body>
</html>

這時候父頁面就可以調用子頁面的a函數,實現js跨域訪問


2.基於script標簽實現跨域

script標簽本身就可以訪問其它域的資源,不受瀏覽器同源策略的限制,可以通過在頁面動態創建script標簽,代碼如下

varscript=document.createElement('script');
script.src="http://aa.xx.com/js/*.js";
document.body.appendChild(script);

這樣通過動態創建script標簽就可以載入其它域的js文件,然後通過本頁面就可以調用載入後js文件的函數,這樣做的缺陷就是不能載入其它域的文檔,只能是js文件,jsonp便是通過這種方式實現的,jsonp通過向其它域傳入一個callback參數,通過其他域的後台將callback參數值和json串包裝成javascript函數返回,因為是通過script標簽發出的請求,瀏覽器會將返回來的字元串按照javascript進行解析執行,實現了域與域之間的數據傳輸。

jquery中對jsonp的支持也是基於此方案


3.後台代理方式


這種方式可以解決所有跨域問題,也就是將後台作為代理,每次對其它域的請求轉交給本域的後台,本域的後台通過模擬http請求去訪問其它域,再將返回的結果返回給前台,這樣做的好處是,無論訪問的是文檔,還是js文件都可以實現跨域

閱讀全文

與iframe跨域調用js對象相關的資料

熱點內容
微信動態表情包搞笑 瀏覽:436
可以去哪裡找編程老師問問題 瀏覽:608
win10lol全屏 瀏覽:25
qq圖片動態動漫少女 瀏覽:122
sai繪圖教程視頻 瀏覽:519
如何分析載入減速法數據 瀏覽:672
手機怎麼免費轉換pdf文件格式 瀏覽:668
在哪個網站可以駕照年檢 瀏覽:89
iphone可以播放ape嗎 瀏覽:991
matlabp文件能破解嗎 瀏覽:817
四川省高三大數據考試是什麼 瀏覽:457
導出打開java文件 瀏覽:671
win10藍屏是硬碟壞了么 瀏覽:46
沈陽哪裡適合學編程 瀏覽:811
django19常用版本 瀏覽:521
三國志11保存在哪個文件夾 瀏覽:88
iphone4s加速 瀏覽:108
編程內存和顯卡哪個重要 瀏覽:672
android連接網路列印機 瀏覽:195
linuxsftp如何上傳文件 瀏覽:603

友情鏈接