1

コンテクスト:

新しいブラウザで機能しない古いコントロールを備えた大規模なサイトで作業しているため、標準のメタX-UA互換タグを使用して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;
     }
4

2 に答える 2

2

有効にするX-UA-Compatibleには、ページの読み込み時にメタ タグが存在する必要があります。Javascript が実行される頃には、変更するには遅すぎます。

iframe のコンテンツに対して IE7 モードのオンとオフを切り替える必要がある場合は、ページの 2 つのバージョンを異なる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 に答える