使用基于iframe网址的javascript更改X-UA兼容的元标记

时间:2013-02-15 17:28:43

标签: javascript cross-browser

上下文:

我正在一个大型网站上工作,其中一些旧控件在新版浏览器中中断,因此我们不得不强制使用标准的meta X-UA-Compatible标记来控制IE7文档模式。我们已经替换了大多数问题控件,但没有时间和预算来替换它们。我们希望在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 个答案:

答案 0 :(得分:2)

为了有效,加载页面时必须存在X-UA-Compatible元标记。当Javascript运行时,改变为时已晚。

如果您真的需要为iframe的内容打开和关闭IE7模式,最好的办法是保留两个版本的页面使用不同的X-UA-Compatible标签,或通过一个传递兼容性标记网址参数(例如?mode=ie7?mode=edge)。

答案 1 :(得分: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网址并加载正确的元标记...思考?