
近弄個東西,需要用到iframe,但是加載的網頁中有_blank,不能讓他跳出來。
如果想讓目的網址的_blank刪除,這是不可能的。
網上找了很多的資料,要么是跨域不能修改.要么就根本牛頭不對馬嘴
后來,看到了html5里iframe有個叫sandbox的屬性把 iframe 里的網頁給關籠子里的屬性
所以,就來找找這個的用法.
<iframe sandbox="allow-same-origin allow-scripts allow-popups allow-forms"
src="http://www.qinglibike.com"
style="border: 0; width:130px; height:20px;"></iframe>
我們在上面的示例中看到了一些可能的沙盒標志,現在讓我們更詳細地研究一下該屬性的內部工作原理。
給定具有空沙盒屬性 ( <iframe sandbox src="..."> </iframe>) 的 iframe,框架文檔將被完全沙盒化,并受到以下限制:
JavaScript 不會在框架文檔中執行。這不僅包括通過腳本標簽顯式加載的 JavaScript,還包括內聯事件處理程序和 javascript: URL。這也意味著將顯示 noscript 標簽中包含的內容,就像用戶自己禁用了腳本一樣。
加框的文檔被加載到一個唯一的原點,這意味著所有的同源檢查都將失敗;獨特的起源與其他起源不匹配,甚至它們自己也不匹配。除其他影響外,這意味著文檔無法訪問存儲在任何來源的 cookie 或任何其他存儲機制(DOM 存儲、索引數據庫等)中的數據。
框架文檔無法創建新窗口或對話框(例如,通過window.open或 target="_blank")。
無法提交表格。
插件不會加載。
框架文檔只能導航自己,不能導航其頂級父級。設置window.top.location會拋出異常,點擊鏈接 target="_top"無效。
自動觸發的功能(自動聚焦的表單元素、自動播放視頻等)被阻止。
無法獲得指針鎖。
框架文檔包含的seamless屬性被忽略。iframes
這是非常嚴格的,加載到完全沙盒中的文檔iframe 確實構成的風險很小。當然,它也沒有多大價值:對于一些靜態內容,您可能可以使用完整的沙盒來擺脫困境,但大多數時候您會希望稍微放松一下。
除了插件之外,這些限制中的每一個都可以通過在沙箱屬性的值中添加一個標志來解除。沙盒文檔永遠不能運行插件,因為插件是未沙盒的本機代碼,但其他一切都是公平的游戲:
allow-forms允許表單提交。
allow-popups允許彈出窗口(window.open()、showModalDialog()、target=”_blank”等)。
allow-pointer-lock允許(驚喜!)指針鎖定。
allow-same-origin允許文件保持其來源;從中加載的頁面https://example.com/將保留對該來源數據的訪問權限。
allow-scripts允許 JavaScript 執行,也允許特性自動觸發(因為通過 JavaScript 實現它們很簡單)。
allow-top-navigation允許文檔通過導航頂級窗口跳出框架。
考慮到這些,我們可以準確評估為什么我們最終會在上面的 Twitter 示例中使用特定的沙盒標志集:
allow-scripts是必需的,因為加載到框架中的頁面會運行一些 JavaScript 來處理用戶交互。
allow-popups是必需的,因為該按鈕會在新窗口中彈出一個推文表單。
allow-forms是必需的,因為推特表單應該是可提交的。
allow-same-origin是必要的,否則 twitter.com 的 cookie 將無法訪問,并且用戶無法登錄以發布表單。
需要注意的重要一點是,應用于框架的沙盒標志也適用于在沙盒中創建的任何窗口或框架。這意味著我們必須添加allow-forms到框架的沙箱中,即使表單只存在于框架彈出的窗口中。
使用該sandbox屬性后,小部件僅獲得它所需的權限,并且插件、頂部導航和指針鎖定等功能仍然被阻止。我們降低了嵌入小部件的風險,沒有任何不良影響。這對所有相關人員來說都是一場勝利。
參考網址:https://www.html5rocks.com/en/tutorials/security/sandboxed-iframes/
您發布的評論即表示同意遵守以下條款:
一、不得利用本站危害國家安全、泄露國家秘密,不得侵犯國家、社會、集體和公民的合法權益;
二、不得發布國家法律、法規明令禁止的內容;互相尊重,對自己在本站的言論和行為負責;
三、本站對您所發布內容擁有處置權。