[轉(zhuǎn)帖]iframe特性全解讀
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
:iframe特性全解讀 iframe特性全解讀前言在平時(shí)的開發(fā)中,或多或少會(huì)用到iframe,大部分時(shí)候我們只需要簡(jiǎn)單的使用iframe標(biāo)簽,設(shè)置個(gè)寬高即可,很少回去深究iframe的別的特性。比如這種用法: <iframe src='https://blog.5udou.cn'> 但直到產(chǎn)品經(jīng)理要求說(shuō),iframe嵌入的頁(yè)面可不可以讓主頁(yè)面的url地址發(fā)生變化呀?好吧,一下子懵圈了,我得去查查資料,于是索性就深究深究iframe的一些特性,免得再次尷尬。 下面所有代碼都可以在這里找到:https://github.com/linxiaowu66/iframe-demo iframe的特性iframe的特性都是依賴參數(shù)配置實(shí)現(xiàn)的,現(xiàn)整理如下有用的屬性: iframe的allow屬性詳解allow屬性的使用需要參考特性策略這一小節(jié)。特性策略可以允許你控制頁(yè)面或者iframe可以使用哪些特性。頁(yè)面控制的話設(shè)置在HTTP頭部的Feature-Policy的這個(gè)字段,iframe的話就是我們要說(shuō)的這個(gè)allow字段。 特性策略的書寫規(guī)則是: 完整的特性名稱參考: Policy Controlled Features或者Feature-Policy 而allowlist則有如下規(guī)則:
今天我們主要講一下iframe下的allow屬性,比如你不允許iframe的頁(yè)面全屏、不允許調(diào)用攝像頭之類的行為,可以這么配置:
比如只允許同源的才可以使用全屏這個(gè)特性:
比如只允許指定源才可以使用定位功能:
iframe的referrerpolicy屬性詳解這個(gè)屬性牽扯到了HTTP的referer策略,我們知道referer的策略是這樣的:
比如我們這樣配置: <iframe allow="fullscreen 'none'" referrerpolicy="no-referrer" src='http://127.0.0.1:3000/iframe.html'></iframe> 我們通過(guò)抓包可以看到對(duì)應(yīng)的請(qǐng)求是這樣的: iframe的sandbox屬性詳解iframe的沙箱模式可以提供一些額外的配置,當(dāng)你把一個(gè)iframe置為沙箱的時(shí)候,意味著沙箱內(nèi)的內(nèi)容的行為全憑你控制了。 比如你在iframe下這樣配置:
但是iframe1.html中卻有對(duì)應(yīng)的js腳本,那么在控制臺(tái)下可以看到這樣的報(bào)錯(cuò): Blocked script execution in 'http://127.0.0.1:3000/iframe1.html' because the document's frame is sandboxed and the 'allow-scripts' permission is not set. 所以當(dāng)你的iframe有腳本的時(shí)候,基本上都會(huì)配置 再比如你的頁(yè)面會(huì)有form標(biāo)簽提交數(shù)據(jù)的時(shí)候,如果沒(méi)有 Blocked form submission to '' because the form's frame is sandboxed and the 'allow-forms' permission is not set. 接下來(lái)解釋一下各個(gè)配置的含義: 關(guān)于沙箱模式的注意點(diǎn)
經(jīng)過(guò)上面的解釋,想必知道剛開始的那個(gè)問(wèn)題的答案了吧? Tips
frames屬性是一個(gè)類似數(shù)組的對(duì)象;因?yàn)閒rames實(shí)際上是window對(duì)象的別名,frames屬性又是可以遍歷的,所以它是一個(gè)類似數(shù)組的對(duì)象: frames屬性的每一項(xiàng)是框架內(nèi)的窗口,即框架內(nèi)的window對(duì)象;frames屬性的每一項(xiàng)并不是iframe的dom節(jié)點(diǎn)!!!若需要獲取iframe的dom節(jié)點(diǎn)可以通過(guò)以下方法: 如果有一個(gè)iframe是處于沙箱模式,并且沒(méi)有設(shè)置
配置了 沒(méi)有配置
該文章在 2023/11/23 17:14:22 編輯過(guò) |
相關(guān)文章
正在查詢... |