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

首頁 > 語言 > JavaScript > 正文

詳解iframe跨域的幾種常用方法(小結)

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

背景

隨著業務的發展,自然地會有一些公共的業務被抽離成為公共組件共各個項目使用。但是由于各個項目用到的技術棧都有所不同,所以這個公共組件就不能方便地被引用了。為解決這個問題,我們把這個組件寫成了單獨的頁面掛到一個域名下,其他項目采用iframe或者webview的方式去加載這個頁面,從而實現功能的簡單復用。

不過這過程中也產生了很多問題,單是跨域就會出現好幾次了。以下我將會介紹我遇到的跨域問題以及一些解決方法。

為什么會跨域

為了保證用戶信息的安全,95年的時候Netscape公司引進了同源策略,里面的同源指的是三個相同:協議、域名、端口。
違反了同源策略就會出現跨域問題,主要表現為以下三方面:

無法讀取cookie、localStorage、indexDB DOM無法獲得 ajax請求無法發送

場景

最近在做一個需求,需要用iframe引入一個別人封裝好的類似視頻播放器的東西。iframe里面有一個全屏的按鈕,點擊后需要頁面讓iframe全屏,由于受到同源策略的限制,iframe無法告訴頁面全屏。

解決辦法

設置domain

document.domain作用是獲取/設置當前文檔的原始域部分,同源策略會判斷兩個文檔的原始域是否相同來判斷是否跨域。這意味著只要把這個值設置成一樣就可以解決跨域問題了。

在此我將domain設置為一級域名的值,a頁面url為a.demo.com,a頁面中iframe引用的b頁面url為b.demo.com,具體設置為

document.domain = 'demo.com'

設置完之后,在a頁面的window上掛載使iframe全屏的方法

// a頁面window.toggleFullScreen = () => { // do something}

在b頁面上可以直接獲取到a頁面的window對象并直接調用

// b頁面window.parent.toggleFullScreen()

但是這個值的設置也有一定限制,只能設置為當前文檔的上一級域或者是跟該文檔的URL的domain一致的值。如url為a.demo.com,那domain就只能設置為demo.com或者a.demo.com。因此,設置domain的方法只能用于解決主域相同而子域不同的情況。

使用中間頁面

我們還可以使用一個與a頁面同域名但不同路由的c頁面作為中間頁面,b頁面加載c頁面,c頁面調用a頁面的方法,從而實現b頁面調用a頁面的方法。具體操作如下:

在a頁面的node層新開一個路由,此路由加載一個c頁面作為中間頁面,c頁面的url為a.demo.com/c。c頁面只是一個簡單的html頁面,在window的onload事件上調用了a頁面的方法。

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title></title></head><body> <script>  window.onload = function () {   parent.parent.toggleFullScreen();  } </script></body></html>            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 项城市| 馆陶县| 阿瓦提县| 霍林郭勒市| 剑川县| 石景山区| 拜城县| 彰化县| 龙岩市| 独山县| 黄平县| 盐边县| 台中市| 楚雄市| 双峰县| 吉木乃县| 浦北县| 岳西县| 兰坪| 镇沅| 怀来县| 盘山县| 衡阳市| 察隅县| 将乐县| 满洲里市| 苏尼特左旗| 海宁市| 益阳市| 平远县| 景德镇市| 南昌市| 牙克石市| 措美县| 长泰县| 河曲县| 桐城市| 陆丰市| 县级市| 张家口市| 出国|