發新話題

JavaScript 兼容不同瀏覽器中的方法

JavaScript 兼容不同瀏覽器中的方法

廢話少說,直接切入正題。
1、有關document.all
這個是IE僅有的,或者說是低版本IE僅有的,高版本的IE都可以用W3C標準來替代document.all,我們可以寫一個通用的函數:
//****************************
//我們要儘可能的使用W3C標準的東西
//如果瀏覽器支持 document.getElementById(),那麼首選就使用 document.getElementById() 來獲取對象
//如果瀏覽器不支持 document.getElementById() 但是支持 document.all[],那麼就用 document.all[] 來獲取對象
//如果瀏覽器既不支持 document.getElementById() 也不支持 document.all[],那我們只好放棄了
function findObj(objname)
{
  var obj = null;
  if (typeof(document.getElementById) != "undefined")
      obj = document.getElementById(objname);
  else if (typeof(document.all) != "undefined")
      obj = document.all[objname];
  return(obj);
}
//****************************

我們看一個簡單的例子
//***********************************
<HTML>
<HEAD>
<TITLE> findObj </TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
function findObj(objname)
{
  var obj = null;
  if (typeof(document.getElementById) != "undefined")
      obj = document.getElementById(objname);
  else if (typeof(document.all) != "undefined")
      obj = document.all[objname];
  return(obj);
}
//-->
</SCRIPT>
</HEAD>

<BODY>
<form>
<input type="text" name="username" id="username" value="ifan">
<input type="button" value="Get myname" onclick="alert( findObj( 'username' ).value );">
</form>
</BODY>
</HTML>
//***********************************

2、有關 event 和window.event
在IE/Opera中,是window.event,而在Firefox中,是event
而事件的對象,在IE中是window.event.srcElement,在Firefox中是event.target,而在Opera中則兩者都支持
我們還是用例子來說明。
//***********************************
<html>
<head>
<title>event的跨瀏覽器測試</title>
<script language="javascript">
<!--
//Firefox中在寫關於event的函數的時候,必須把event對象作為參數傳遞給函數,這樣才能使用event對象
function doTestEvent( evt )
{
  //如果是IE/Opera,我們就用 srcElement 來獲取觸發事件的對象
  //如果是Firefox,我們就用 target 來獲取觸發事件的對象
  var src = evt.srcElement ? evt.srcElement : evt.target;
  alert( src.value );
}
//-->
</script>
</head>
<body>

<form name="frmtest">
<input type="button" value="event 測試" onclick="doTestEvent(event);" name="bttest">
</form>

</body>
</html>
//***********************************

這裡順便說一下判斷鼠標按鍵的問題。
在 IE 裡面
左鍵是 window.event.button = 1
右鍵是 window.event.button = 2
中鍵是 window.event.button = 4
沒有按鍵動作的時候 window.event.button = 0

在 Firefox 裡面
左鍵是 event.button = 0
右鍵是 event.button = 2
中鍵是 event.button = 1
沒有按鍵動作的時候 event.button = 0

在 Opera 7.23/7.54 裡面
鼠標左鍵是 window.event.button = 1
沒有按鍵動作的時候 window.event.button = 1
右鍵和中鍵無法獲取

而在 Opera 7.60/8.0 裡面
鼠標左鍵是 window.event.button = 0
沒有按鍵動作的時候 window.event.button = 0
右鍵和中鍵無法獲取

下面我們寫一個能在 IE4.01+/Firefox 9.0+/Opera 7.23+ 環境中均能運行正常的小程序,功能是用鼠標拖動層。
//***********************************
<HTML>
<HEAD>
<TITLE>可用鼠標拖動的層</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
var moving = false;
var initX  = 0;
var initY  = 0;

//*******************
// 獲取觸發事件的對象
//*******************
function findSrc(evt)
{
  return( evt.target ? evt.target : evt.srcElement );
}

function start(evt)
{
    //按下鼠標左鍵才允許移動
    //evt.button == 1 IE/Opera 7.23/7.54
    //evt.button == 0 Firefox/Opera 7.6+
    if ( evt.button == 1 || evt.button == 0)
    {
        moving = true;
        initX  = evt.offsetX ? evt.offsetX : evt.layerX;
        initY  = evt.offsetY ? evt.offsetY : evt.layerY;
        findSrc( evt ).style.cursor = "move";
        window.status = "開始(button=" + evt.button + ")";
    } else {
        stop( evt );
    }
}

function stop( evt )
{
    moving = false;
    findSrc( evt ).style.cursor = "";
    window.status = "結束(button=" + evt.button + ")";
}

function move(evt)
{
    //按下鼠標左鍵才允許移動
    //evt.button == 1 IE/Opera 7.23/7.54
    //evt.button == 0 Firefox/Opera 7.6+
    if (moving && ( evt.button == 1 || evt.button == 0 ))
    {
        var intx = document.body.scrollLeft + evt.clientX; //獲取當前鼠標位置的X坐標
        var inty = document.body.scrollTop + evt.clientY; //獲取當前鼠標位置的Y坐標

        var div = findSrc( evt );
        div.style.top = inty - initY;
        div.style.left = intx - initX;
        window.status = "X=" + intx + " Y=" + inty + " button=" + evt.button;
    } else {
        window.status = "已停止(button=" + evt.button + ")";
    }
}
//-->
</SCRIPT>
</HEAD>

<BODY>
<div id="mdiv"
     style="position: absolute; width:300px; height: 200px; background-color: #FFFFE1;"
     onmousedown="start( event );"
     onmouseup="stop( event );"
     onmouseout="stop( event );"
     onmousemove="move( event );"></div>
//***********************************

有關 event 和 window.event
2008-01-24 10:52
在IE/Opera中,是window.event,而在Firefox中,是event
而事件的對象,在IE中是window.event.srcElement,在Firefox中是event.target,而在Opera中則兩者都支持。
我們還是用例子來說明。
//***********************************
<HTML>
<HEAD>
<TITLE> event的跨瀏覽器測試 </TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
//Firefox中在寫關於event的函數的時候,必須把event對象作為參數傳遞給函數,這樣才能使用event對象
function doTestEvent( evt )
{
  //如果是IE/Opera,我們就用 srcElement 來獲取觸發事件的對象
  //如果是Firefox,我們就用 target 來獲取觸發事件的對象
  var src = evt.srcElement ? evt.srcElement : evt.target;
  alert( src.value );
}
//-->
</script>
</head>
<body>

<form name="frmtest">
<input type="button" value="event 測試" onclick="doTestEvent(event);" name="bttest">
</form>

</body>
</html>
//***********************************

這裡順便說一下判斷鼠標按鍵的問題。
在 IE 裡面
左鍵是 window.event.button = 1
右鍵是 window.event.button = 2
中鍵是 window.event.button = 4
沒有按鍵動作的時候 window.event.button = 0

在 Firefox 裡面
左鍵是 event.button = 0
右鍵是 event.button = 2
中鍵是 event.button = 1
沒有按鍵動作的時候 event.button = 0

在 Opera 7.23/7.54 裡面
鼠標左鍵是 window.event.button = 1
沒有按鍵動作的時候 window.event.button = 1
右鍵和中鍵無法獲取

而在 Opera 7.60/8.0 裡面
鼠標左鍵是 window.event.button = 0
沒有按鍵動作的時候 window.event.button = 0
右鍵和中鍵無法獲取

下面我們寫一個能在 IE4.01+/Firefox 0.9+/Opera 7.23+ 環境中均能運行正常的小程序,功能是用鼠標拖動層。
//***********************************
<HTML>
<HEAD>
<TITLE> 可用鼠標拖動的層 </TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
var moving = false;
var initX  = 0;
var initY  = 0;

//*******************
// 獲取觸發事件的對象
//*******************
function findSrc(evt)
{
  return( evt.target ? evt.target : evt.srcElement );
}

function start(evt)
{
    //按下鼠標左鍵才允許移動
    //evt.button == 1 IE/Opera 7.23/7.54
    //evt.button == 0 Firefox/Opera 7.6+
    if ( evt.button == 1 || evt.button == 0)
     {
        moving = true;
        initX  = evt.offsetX ? evt.offsetX : evt.layerX;
        initY  = evt.offsetY ? evt.offsetY : evt.layerY;
        findSrc( evt ).style.cursor = "move";
        window.status = "開始(button=" + evt.button + ")";
     } else {
        stop( evt );
     }
}

function stop( evt )
{
    moving = false;
    findSrc( evt ).style.cursor = "";
    window.status = "結束(button=" + evt.button + ")";
}

function move(evt)
{
    //按下鼠標左鍵才允許移動
    //evt.button == 1 IE/Opera 7.23/7.54
    //evt.button == 0 Firefox/Opera 7.6+
    if (moving && ( evt.button == 1 || evt.button == 0 ))
     {
        var intx = document.body.scrollLeft + evt.clientX; //獲取當前鼠標位置的X坐標
        var inty = document.body.scrollTop + evt.clientY; //獲取當前鼠標位置的Y坐標

        var div = findSrc( evt );
        div.style.top = inty - initY;
        div.style.left = intx - initX;
        window.status = "X=" + intx + " Y=" + inty + " button=" + evt.button;
     } else {
        window.status = "已停止(button=" + evt.button + ")";
     }
}
//-->
</SCRIPT>
</HEAD>

<BODY>
<div id="mdiv"
     style="position: absolute; width:300px; height: 200px; background-color: #FFFFE1;"
     onmousedown="start( event );"
     onmouseup="stop( event );"
     onmouseout="stop( event );"
     onmousemove="move( event );"></div>
//***********************************

TOP

控制框架iframe嵌入頁面高度自動調整

做SHAREPOINT站點開發,經常用到框架.
但是被嵌入的頁面高度是不固定的,要讓框架隨著嵌入的頁面的高度自動調整大小.
這樣才能適合頁面的整體效果!
利用JS代碼:
<script   language="javascript" type="text/javascript">  
//定義iframe的ID
function dyniframesize()
{
var iframeids=["workiframe"]
//如果用戶的瀏覽器不支持iframe是否將iframe隱藏 yes 表示隱藏,no表示不隱藏
var iframehide="yes"
var dyniframe=new Array()
for (i=0; i<iframeids.length; i++)
{
if (document.getElementById)
{
//自動調整iframe高度
dyniframe[dyniframe.length] = document.getElementById(iframeids[i]);
if (dyniframe[i] && !window.opera)
{
dyniframe[i].style.display="block"
if (dyniframe[i].contentDocument && dyniframe[i].contentDocument.body.offsetHeight) //如果用戶的瀏覽器是NetScape
dyniframe[i].height = dyniframe[i].contentDocument.body.offsetHeight;
else if (dyniframe[i].Document && dyniframe[i].Document.body.scrollHeight) //如果用戶的瀏覽器是IE
dyniframe[i].height = dyniframe[i].Document.body.scrollHeight;
}
}
//根據設定的參數來處理不支持iframe的瀏覽器的顯示問題
if ((document.all || document.getElementById) && iframehide=="no")
{
var tempobj=document.all  document.all[iframeids[i]] : document.getElementById(iframeids[i])
tempobj.style.display="block"
}
}
}
if (window.addEventListener)
window.addEventListener("load", dyniframesize, false)
else if (window.attachEvent)
window.attachEvent("onload", dyniframesize)
else
window.onload=dyniframesize
  </script>
框架代碼為:
<iframe id="workiframe" name="workiframe"  width=100%  scrolling="no" frameborder="no" src="../images/zzjg0611.jpg" allowTransparency marginheight="0" marginwidth="0" onload="javascript:dyniframesize()"></iframe>

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。