1. 程式人生 > >後臺框架左側在IE9下顯示不正確的解決及IE瀏覽器型別檢測

後臺框架左側在IE9下顯示不正確的解決及IE瀏覽器型別檢測

一個專案後臺,框架結構,已相容IE6、IE7、IE8、firefox、Chrome以及遨遊等瀏覽器,但在IE9下確出現顯示問題。如下圖所示:

原始碼

frameMain.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<frameset rows="98,*,8" cols="*" framespacing="0" frameborder="NO" border="0" id="mainset">
  <frame src="top.php" name="topFrame" scrolling="No" noresize="noresize" id="topFrame" />
  <frameset rows="*,0" cols="*" framespacing="0" frameborder="NO" scrolling="no"  border="0" id="fset3">
    <frame src="middle.php?folder=public" name="mainFrame" id="mainFrame" />
    <frame src="about:blank" name="download" scrolling="NO" noresize>
  </frameset>
  <frame src="down.php" name="bottomFrame" scrolling="No" noresize="noresize" id="bottomFrame" />
</frameset>
<noframes>
</head>
<body></body>
</noframes>
</html>

原middle.php內容

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>middle</title>
<style type="text/css">
<!--
body{margin:0px;}
-->
</style>
<script>
function switchSysBar(){
  var locate=location.href.replace('middle.php?folder=<?php echo $folder;?>','');
  var ssrc=document.all("img1").src.replace(locate,'');
  if (ssrc=="images/main_55.gif"){
    document.all("img1").src="images/main_55_1.gif";
    document.all("frmTitle").style.display="none"
  }else{
    document.all("img1").src="images/main_55.gif";
    document.all("frmTitle").style.display=""
  }
}
</script>
</head>
<body style="overflow:hidden">
<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0" style="table-layout:fixed;">
  <tr>
    <td width="171" id=frmTitle noWrap name="fmTitle" align="center" valign="top">
      <table width="171" height="100%" border="0" cellpadding="0" cellspacing="0" style="table-layout:fixed;">
        <tr>
          <td bgcolor="#1873aa" style="width:6px;"></td>
          <td width="165"><iframe name="I1" height="100%" width="165" src="<?php echo $folder;?>/left.php" border="0" frameborder="0" scrolling="auto">瀏覽器不支援嵌入式框架,或被配置為不顯示嵌入式框架。</iframe></td>
        </tr>
      </table>
    </td>
    <td style="width:6px;" valign="middle" bgcolor="1873aa" onclick="switchSysBar();"><SPAN title=關閉/開啟左欄><img style="cursor:pointer;width:6px;height:40px;" src="images/main_55.gif" name="img1" width=6 height=40 id=img1></SPAN></td>
    <td width="100%" align="center" valign="top"><iframe name="right" height="100%" width="100%" border="0" frameborder="0" src="<?php echo $folder;?>/index.php">瀏覽器不支援嵌入式框架,或被配置為不顯示嵌入式框架。</iframe></td>
  </tr>
</table>
</body>
</html>
解決辦法是通過判斷瀏覽器型別,如果是IE9,則通過jQuery在DOM載入結束或改變視窗大小的時候動態改變left.php所在iframe的容器table(id="a")的高度

更改後的middle.php內容

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script language="JavaScript" type="text/JavaScript" src="js/jQuery1.6.2.js"></script>
<title>middle</title>
<style type="text/css">
<!--
body{margin:0px;}
.mian{text-align:center;width:1024px;margin:0 auto;}
-->
</style>
<script>
function changeHeight(){
  $("#a").attr("height",document.documentElement.clientHeight);
}
window.onresize=changeHeight;
$(document).ready(function(){
  ieMode=document.documentMode;
  var isIE=!!window.ActiveXObject;
  var isIE6=isIE&&!window.XMLHttpRequest;
  var isIE7=isIE&&!isIE6&&!ieMode||ieMode==7;
  var isIE8=isIE&&ieMode==8;
  var isIE9=isIE&&ieMode==9;
  if(isIE9) changeHeight();
});

function switchSysBar(){
  var locate=location.href.replace('middle.php?folder=<?php echo $folder;?>','');
  var ssrc=document.all("img1").src.replace(locate,'');
  if (ssrc=="images/main_55.gif"){
    document.all("img1").src="images/main_55_1.gif";
    document.all("frmTitle").style.display="none"
  }else{
    document.all("img1").src="images/main_55.gif";
    document.all("frmTitle").style.display=""
  }
}
</script>
</head>
<body style="overflow:hidden">
<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0" style="table-layout:fixed;">
  <tr>
    <td width="171" id=frmTitle noWrap name="fmTitle" align="center" valign="top">
      <table id=a width="171" height="100%" border="0" cellpadding="0" cellspacing="0" style="table-layout:fixed;">
        <tr>
          <td bgcolor="#1873aa" style="width:6px;"></td>
          <td width="165"><iframe name="I1" height="100%" width="165" src="<?php echo $folder;?>/left.php" border="0" frameborder="0" scrolling="auto">瀏覽器不支援嵌入式框架,或被配置為不顯示嵌入式框架。</iframe></td>
        </tr>
      </table>
    </td>
    <td style="width:6px;" valign="middle" bgcolor="1873aa" onclick="switchSysBar();"><SPAN title=關閉/開啟左欄><img style="cursor:pointer;width:6px;height:40px;" src="images/main_55.gif" name="img1" width=6 height=40 id=img1></SPAN></td>
    <td width="100%" align="center" valign="top"><iframe name="right" height="100%" width="100%" border="0" frameborder="0" src="<?php echo $folder;?>/index.php">瀏覽器不支援嵌入式框架,或被配置為不顯示嵌入式框架。</iframe></td>
  </tr>
</table>
</body>
</html>

JavaScript 判斷 IE6/IE7/IE8/IE9

ieMode=document.documentMode;
var isIE=!!window.ActiveXObject;
var isIE6=isIE&&!window.XMLHttpRequest;
var isIE7=isIE&&!isIE6&&!ieMode||ieMode==7;
var isIE8=isIE&&ieMode==8;
var isIE9=isIE&&ieMode==9;
if(isIE6){
  alert("正在使用 IE6 瀏覽器");
};
if(isIE7){
  alert("正在使用 IE7 瀏覽器,或者當前文件模式為 IE8");
};
if(isIE8){
  alert("正在使用 IE8 瀏覽器,或者當前文件模式為 IE8")");
};
if(isIE9){
  alert("正在使用 IE9 瀏覽器,或者當前文件模式為 IE9");
};

在 IE8 之後,IE 添加了 document.documentMode 屬性,在 IE7/IE6 及以前的版本中該值都會返回 undefined。具體變化可以參考下表:
瀏覽器 IE6 IE7 IE8 IE8相容性檢視 IE9 IE9相容性檢視
documentMode undefined undefined 8 7 9 7

在使用開發人員工具手動修改“文件模式”時,documentMode 的值也會跟著改變。