IE 相容模式 設置 Meta Compatible 和 Iframe 子頁面的關係

来源:https://www.cnblogs.com/xakoy/archive/2018/07/13/9304429.html
-Advertisement-
Play Games

背景 因為歷史原因,之前很多的系統都會是 頂級頁面+Iframe來載入子級頁面的這種模式構件系統,而且系統都只能運行在IE6或者IE 高版本相容模式下(IE 7模式)。 隨著現在的審美原來越高,腳本能里越來越強,無論是用戶和是軟體商都希望能系統升級,那麼在升級的過程中,肯定是要保證原有的系統能正常運 ...


背景

因為歷史原因,之前很多的系統都會是 頂級頁面+Iframe來載入子級頁面的這種模式構件系統,而且系統都只能運行在IE6或者IE 高版本相容模式下(IE 7模式)。 隨著現在的審美原來越高,腳本能里越來越強,無論是用戶和是軟體商都希望能系統升級,那麼在升級的過程中,肯定是要保證原有的系統能正常運行的。

通常的做法會是如下:

將頁面利用 html meta標簽,設置Compatible屬性,來使得無論用戶是否設置了相容模式,都讓當前網頁強勢使用最高版本瀏覽器模式,這樣可以讓我們界面利用一些css3的特性做出性能更好,更漂亮的網頁。也能使用更複雜的JS,更頁面增加更強的效果。

那麼可能會遇到以下幾種情況:

  1. 頂級頁面設置了Compatible, IE=Edge。 你會發現原來系統iframe能正常的網頁,在你新的頁面中運行不正常了,即便開啟了相容模式,或者iframe裡面的網頁設置了 Compatible, IE=EmulateIE7。你的頁面依然瀏覽不正常。
  2. 要解決上面的問題,就是頂級頁面不能設置Compatible, IE=Edge,你可以設置頂級頁面的Compatible, IE=EmulateIE8或IE=EmulateIE7,則可以讓iframe裡面的網頁瀏覽正常。
  3. 使用了第2步驟的解決方案,你會發現,當你新做的網頁,裡面用到了css3或者高版本的腳本庫如(vue.js),在測試IE9中很正常,但是將網頁簽入到iframe中後,頁面不正常,或者腳本報錯。這是因為當頂級頁面設置為IE=EmulateIE8或IE=EmulateIE7,iframe裡面的頁面設置IE=edge不起作用,它的文檔模式顯示的是IE8。

為什麼會出現這種情況呢?

原因和解釋

stackoverflow的一個問題《Trying to use IE=edge X-UA-Compatible in an iframe on a page using IE=EmulateIE7》, 有人給出了答案:

IE does not allow mixing IE9+ and older modes in a frame hierarchy. If your top document is IE7, the highest you can get in any inner document is IE8. Similarly, you wouldn't be able to host anything but IE9 mode docs inside an IE9 mode page.

上面的答案很通俗易懂,翻下大意如下:

在IE中不允許IE9+的模式和舊模式混合,如果頂級頁面的文檔模式是IE7,則你在iframe中的頁面最高級的文檔模式是IE8,同樣,頂級頁面的模式是IE9+,則iframe中的頁面文檔模式不可能低於IE9 以下。

這個答案和上面我們遇到的問題是完美契合的,我們也可以寫一些例子來證明這個答案,【例子 】放在附件中,可以下載更改Compatible測試驗證下。

csdn上也有人遇到了,這個問題,有同學回答和上面的一致,直通車《能不能讓iframe內外的頁面用不同的文檔模式解析》。

結論

當遇到背景當中的問題時,目前好像無解,只能設置頂級的網頁最高為IE8,然後所有的系統都必須相容IE8模式,想不支持IE8模式,只能當做外鏈來打開。所有如果要支持前有的系統,無論再過多少年,前端技術如何發展,你新做的系統,技術上也只能限定在IE8支持才情況下。

該如何考量這個問題,還需要從業務、和遷移策略上改變,可以考慮如下幾種方式:

  1. 升級頂級的頁面支持最高版本瀏覽器支持,那些需要相容模式才能運行的系統,考慮是否使用外鏈的方式打開。
  2. 保留原有的頂級頁面,做一個新的頂級頁面,在頂級頁面打開的那些系統時,提示用戶去舊的平臺打開,並給出鏈接,這種做法會失去一些用戶體驗,怎麼樣儘量讓用戶體驗更好,就要發揮各自的聰明才智了。
  3. 直接使用兩個平臺,一個平臺是就有的系統,一個平臺是新的系統。

各位看官,有什麼好的想法可以提提。

參考:

  1. Specifying legacy document modes
  2. Trying to use IE=edge X-UA-Compatible in an iframe on a page using IE=EmulateIE7
  3. 使用X-UA-Compatible來搞定IE瀏覽器相容模式
  4. IE強制標準模式---標準模式與相容模式設置

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一. 什麼是消息隊列? 消息(Message)是指在應用間傳送的數據。消息可以非常簡單,比如只包含文本字元串,也可以更複雜,可能包含嵌入對象。 消息隊列(Message Queue)是一種應用間的通信方式,消息發送後可以立即返回,由消息系統來確保消息的可靠傳遞。消息發佈者只管把消息發佈到 MQ 中而 ...
  • // my.js function $(id){return document.getElementById(id)};function show(obj){obj.style.display = "block"};function hide(obj){obj.style.display = "no ...
  • 最近項目中客戶需要實現身份證識別功能,合理計划了之後決定使用百度ai的身份證識別。 身份證識別是文字識別的一種,類似的功能有很多比如駕駛證識別等等,原理都是相同的。 對於前端初學者來說,如果要實現這種功能靠頁面,js是實現不了的,可以確定地說就是讓後臺配合實現。實現過程是上傳一張圖片給後臺,後臺使用 ...
  • https://www.zhangxinxu.com/wordpress/2017/07/js-text-string-download-as-html-json-file/ 侵刪 1.H5 download屬性 downFile(下載地址, 保存名稱); 2.iframe方式 3.form方式 ...
  • Element表單驗證(1) 首先要掌握Element官方那幾個表單驗證的例子,然後才看下麵的教程。 Element主要使用了 "async validator" 這個庫作為表單驗證 主要分成三部分 Validate Options Rules 其中,對於我們使用Element的來說,Rules最重 ...
  • 響應式 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 ... ...
  • function Obj(){} Obj.prototype={ scroll:function(){ /* 主要是做相容處理 這裡必須時!=null 因為預設值和每次滾動的時侯 都可以值為0 但是 if(0)為假 所以就只要不為null 就執行 ... ...
  • 仿Jquery查詢 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...