1

语境:

我正在一个大型站点上工作,其中一些旧控件会在较新的浏览器中中断,因此我们不得不使用您的标准 meta X-UA-Compatible 标签强制 IE7 文档模式。我们已经更换了大部分问题控件,但没有时间和预算来全部更换。我们希望没有控件的页面可以在 IE 浏览器的当前文档模式下呈现,以利用其提供的客户端性能提升。问题是我无法让较新的 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;
     }
4

2 回答 2

2

为了有效,X-UA-Compatible元标记必须在页面加载时出现。到 Javascript 运行时,改变已经太迟了。

如果您确实需要为 iframe 的内容打开和关闭 IE7 模式,最好的办法是保留具有不同X-UA-Compatible标签的页面的两个版本,或者通过 URL 参数传递兼容性标志(例如,?mode=ie7vs. ?mode=edge) .

于 2013-02-15T17:38:52.577 回答
0

就像我根据迄今为止的答案和评论想到我应该做什么......

听起来好像我需要重新加载主页以更改 IE 元标记。根据我当前的代码,我在想这样的事情:

 //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 url 并在加载时更正元标记......想法?

于 2013-02-15T18:02:47.550 回答