2013-02-15 74 views
1

方面:改變基於iframe網址與JavaScript的X-UA兼容meta標籤

我在一個大型網站有,所以我們不得不強制IE7文檔模式,在新的瀏覽器打破一些舊的控制工作的標準的meta X-UA兼容標籤。我們已經取代了大部分的問題控制措施,但沒有時間和預算來替代它們。我們希望沒有控件的頁面在當前文檔模式下呈現,以便IE瀏覽器利用客戶端提供的性能提升。問題是,我很難得到更新的即瀏覽器切換模式,如我想要的。該網站的導航使用了一個iframe,我覺得這可能是我的主要問題。我在iframe的父頁面上有我的JavaScript。

我想用javascript來做到這一點,並一直在嘗試這樣做。這是我正在做的。它成功地改變了標籤,但瀏覽器似乎並不在意。 爲了讓瀏覽器考慮標籤,我需要更改什麼?

 //tag swapping code 
    function FixIEMetaTag(url) { 

     //Remove current IE meta Tag 
     var iefixTagOld = document.getElementsByTagName('meta')[0]; 
     if (iefixTagOld) { iefixTagOld.parentNode.removeChild(iefixTagOld); } 

     //Determine Document Type for IE browsers 
     var contentVal = 'IE=Edge';    
     if (IsPageWithBadGrid(url)) { contentVal = 'IE=7'; } 

     //Create and add new IE meta Tag 
     var iefixTag = document.createElement('meta'); 
     iefixTag.setAttribute("http-equiv", "X-UA-Compatible"); 
     iefixTag.setAttribute("content", contentVal); 
     var theHead = document.getElementsByTagName('head')[0]; 
     theHead.insertBefore(iefixTag, theHead.firstChild); 
    } 

    //navigation code 
    function GoToPage(url) { 

     if (window.frames["ifrm"]) { 

      FixIEMetaTag(url); 

      window.open(url,"ifrm"); 
      return false; 
     } 

     return true; 
    } 
+2

在加載頁面後,沒有必要以編程方式更改''。它們在加載時執行,然後添加/更改/刪除''被忽略。 – Teemu 2013-02-15 17:40:42

+0

我當時希望有某種方式可以在瀏覽器上加載iframe內容時大吼一聲,但我想不是 – jumpdart 2013-02-15 17:46:23

+0

好吧,'iframe'可能更難以在IE中設置文檔模式。它們通常從主窗口繼承模式,甚至忽略文字'x-ua-compatible',特別是當試圖在'iframe'中使用「更高」模式時。 – Teemu 2013-02-15 17:49:53

回答

1

爲了有效,在加載頁面時X-UA-Compatible meta標籤必須存在。在Javascript運行的時候,改變已經太遲了。

如果您確實需要爲iframe的內容打開和關閉IE7模式,最好的辦法是將頁面的兩個版本保留爲不同的X-UA-Compatible標籤,或者通過URL參數傳遞兼容性標誌(例如,?mode=ie7?mode=edge)。

+0

非常多,我需要重新加載父頁面?我試圖解決這個問題,因爲這個人在假裝不會被重新加載的情況下做了太多的垃圾處理。 – jumpdart 2013-02-15 17:41:52

+0

@Teemu我在想他是在根據我在回答中提供的內容提出一些事情 – jumpdart 2013-02-15 18:05:11

0

就像什麼我應該做的基礎上,回答和評論到目前爲止思想...

聽起來好像我需要重新加載主頁更改IE meta標籤。根據我當前的代碼即時通訊思想是這樣的:

//navigation code 
function GoToPage(url) { 

    if (window.frames["ifrm"]) { 

     var oldContentTagValue = 'IE=Edge'; 
     //Determine Previous IEType tag 
     var iefixTagOld = document.getElementsByTagName('meta')[0]; 
     if (iefixTagOld) { 
      oldContentTagValue = (?);//something fancy to get current tag type 

     } 

     //Determine Document Type for IE browsers 
     var contentVal = 'IE=Edge';    
     if (IsPageWithBadGrid(url)) { contentVal = 'IE=7'; } 

     if(oldContentTagValue !=contentVal){ 
      //redirect to current page with contenttypetag stuff and iframe url in query string 
     } 
     else{ 
      window.open(url,"ifrm"); 
     } 
     return false; 
    } 

    return true; 
} 

然後,我將設置iframe網址與正確的meta標籤上的負載,基於查詢字符串參數...思考?

+1

''一些奇怪的東西''是'oldContentTagValue = iefixTagOld.content'(_if_第一個'meta'''是'x-ua兼容的')。但要小心,''不區分大小寫,因此最好在比較之前將值轉換爲大/小寫... – Teemu 2013-02-15 18:23:03

+1

要捕捉'x-ua兼容',您可以遍歷所有'',並檢查每個標籤的'.httpEquiv'的值,直到找到'x-ua compatible'(記住不區分大小寫)。 – Teemu 2013-02-15 18:38:07