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

首頁 > 語言 > JavaScript > 正文

詳解Javascript幾種跨域方式總結

2024-05-06 15:10:48
字體:
來源:轉載
供稿:網友

在客戶端編程語言中如javascript,同源策略規定跨域之間的腳本是隔離的,一個域的腳本不能訪問和操作另外一個域的絕大部分屬性和方法。只有當兩個域具有相同的協議,相同的主機,相同的端口時,我們就認定他們是相同的域。可是在實際開發中我們經常需要獲取其他域的資源,這個時候各種不同的跨域資源方式就各顯神通了,今天主要來總結一下工作中常用的幾種跨域方式,以備查詢。

1.window.name

window 對象的name屬性是一個很特別的屬性,當在 frame 中加載新頁面時,name 的屬性值依舊保持不變。那么我們可以在頁面 A中用iframe加載其他域的頁面B,而頁面B中用JavaScript把需要傳遞的數據賦值給window.name,iframe加載完成之后,此時 name 屬性值可被獲取到,以訪問 Web 服務發送的信息。但 name 屬性僅對相同域名的 frame 可訪問。這意味著為了訪問 name 屬性,當遠程 Web 服務頁面被加載后,必須導航 frame 回到原始域。即頁面A修改iframe的地址,將其變成同域的一個地址,然后就可以讀出window.name的值了。一旦 name 屬性獲得,銷毀 frame 。這個方式非常適合單向的數據請求,而且協議簡單、安全。

頁面B(www.jesse.com/data.html)代碼如下:

<script type="text/javascript">window.name = 'I was there!';// 這里是要傳輸的數據,大小一般為2M,IE和firefox下可以大至32M左右// 數據格式可以自定義,如json、字符串</script>

頁面A(www.jack.com/index.html)代碼如下:

<script type="text/javascript">var state = 0,  iframe = document.createElement('iframe'),  loadfn = function() {    if (state === 1) {      var data = iframe.contentWindow.name; // 讀取數據      console.log(data); //彈出'I wasthere!'      (function(){        //獲取數據以后銷毀這個iframe。        iframe.contentWindow.document.write('');        iframe.contentWindow.close();        document.body.removeChild(iframe);      })();    } else if (state === 0) {      state = 1;      // 設置的代理頁面使其回原始域      iframe.contentWindow.location = "http://www.jack.com/proxy.html";     }  };iframe.src = 'http://www.jesse.com/data.html';if (iframe.attachEvent) {  iframe.attachEvent('onload', loadfn);} else {  iframe.onload = loadfn;}document.body.appendChild(iframe);</script>

2.具備src的標簽

雖然瀏覽器默認禁止了跨域訪問,但并不禁止在頁面中用標簽的src屬性引用其他域的文件。根據這一點,可以方便地通過創建具有src屬性的節點方法來實現完全跨域的通信。使用這種原理的跨域方式有以下幾種:

動態創建script

例如我要從域A的頁面pageA加載域B的數據,那么在域B的頁面pageB中我以JavaScript的形式聲明pageA需要的數據,然后在 pageA中用script標簽把pageB加載進來,那么pageB中的腳本就會得以執行。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 库伦旗| 德阳市| 化德县| 九寨沟县| 东城区| 石门县| 木兰县| 临武县| 普安县| 武冈市| 嘉定区| 海原县| 磐石市| 昆明市| 论坛| 新绛县| 安丘市| 辽宁省| 大化| 桂平市| 山东省| 莎车县| 固镇县| 获嘉县| 新竹县| 广平县| 科技| 宝应县| 石家庄市| 连南| 北川| 汽车| 青浦区| 永善县| 文成县| 突泉县| 定州市| 崇州市| 马尔康县| 沙坪坝区| 千阳县|