跨瀏覽器javascript的簡單介紹

本文目錄一覽:

熟悉JAVASCRIPT和CSS跨瀏覽器方面的技巧。 請問 跨瀏覽器是什麼意思?

因為瀏覽器兼容性的問題,少數的JAVASCRIPT或者CSS語句在不同的瀏覽器上會有不同的表現,所謂跨瀏覽器,就是解決兼容性問題,使你的代碼能夠在不同的瀏覽器中運行時可以選擇性的執行針對性的代碼從而實現同樣的表現效果。

舉個最普遍的例子,現在很多網頁都要用到的ajax技術,需要用到xmlhttp對象,這個對象在不同的瀏覽器中的創建方式是不同的:

if (window.XMLHttpRequest) {

// code for IE7+, Firefox, Chrome, Opera, Safari

xmlHttp = new XMLHttpRequest();

}

else {

// code for IE5, IE6

xmlHttp = new ActiveXObject(“Microsoft.XMLHTTP”);

}

這段js代碼就使用了跨瀏覽器的技巧,針對不同的瀏覽器使用不同的創建方式。

再看一段Css代碼:

opacity:0.5; /* Opera9.0+、Firefox1.5+、Safari、Chrome */

filter:alpha(opacity=50); /* IE6 */

這是設置可見html元素的透明度,在不同的瀏覽器中語法不同,你必須同時使用這兩條語句在火狐和IE中才會有同樣的表現,這種用法也是一種跨瀏覽器技巧。

javascript 什麼叫跨瀏覽器事件處理

一.關於獲取事件對象

FF有點倔強,只支持arguments[0],不支持window.event。這次真的不怪IE,雖然把event作為window的屬性不合規範,但大家都已經默許這個小問題存在了,只有FF這麼多年了還是特立獨行。所以,跨瀏覽器的事件對象獲取有以下兩種方式:

帶參的:

?

1

2

3

4

getEvent : function(event){

return event ? event : window.event;

//return event || window.event;//或者更簡單的方式

}

無參的:

?

1

2

3

4

function getEvent() {

return arguments[0] ? arguments[0] : window.event;

//return arguments[0] || window.event;//或者更簡單的方式

}

需要特別說明一種方式:HTML的DOM0級方式 + 帶參的事件處理器,如下:

?

1

2

3

4

function handler(event){

//do something

}

!– HTML的DOM0級方式 –brbutton id=”btn” onclick=”handler(event);”按鈕/buttonbr

上面這種方式是全瀏覽器兼容的,但依賴HTML的DOM0級方式的缺點很明顯,所以沒能成為像前兩種那樣的主流方法,而JS的DOM0級方式 + 帶參的事件處理器,如下:

?

1

2

3

4

5

function handler(event){

//do something

}

btn.onclick = handler;//JS的DOM0級方式

//btn.onclick = function(event){/*do something*/}//或者匿名函數,效果同上

這種方式不是全瀏覽器兼容的,[IE8-]不支持,IE9+未知,FF,Chrome支持。一直以為HTML的DOM0級事件處理和JS的DOM0級事件處理是等價的,現在做了很多實驗才發現二者是有區別的

二.關於獲取事件源

event.srcElement是[IE8-]唯一的方式,IE9+未知,其它瀏覽器都支持標準的event.target方式

三.關於阻止事件默認行為

event.preventDefault()是標準方法,但[IE8-]不支持,IE自己的方式是event.returnValue = false;

四.關於停止事件傳播

event.stopPropagation()是標準方法,IE又有意見了,他要這麼玩:event.cancelBubble = true;這裡需要特別注意了,因為cancel是屬性而不是方法,與標準相差甚遠,容易記錯

五.關於事件處理器的添加和移除

DOM0級方式

ele.onclick = handler;ele.onclick=null;最古老的一種方式

優點:全瀏覽器兼容

缺點:同一事件只能綁定/解綁一個事件處理器

DOM2級方式

?

1

ele.add/removeEventListener(eventType, handler, catch);

和IE方式:ele.attach/detachEvent(‘on’+eventType, handler);

優點:支持綁定/解綁多個事件處理器

缺點:需要做兼容性判斷。需要注意的是:標準方式中最後一個參數表示是否在事件捕獲階段綁定/解綁,IE不支持事件捕獲,所以也就沒有第三個參數了

注意:IE方式不僅方法名與標準不同,參數中事件類型還要加上on,否則綁定無效但不報錯

六.跨瀏覽器的事件處理

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

//跨瀏覽器的事件處理器添加方式

var EventUtil = {

addHandler : function(elem, type, handler){

if(elem.addEventListener){

elem.addEventListener(type, handler, false);

}

else if(elem.attachEvent){

elem.attachEvent(“on” + type, handler);//添加多個同一類型的handler時,IE方式的規則是最後添加的最先觸發

}

else{

if(typeof elem[“on” + type] === ‘function’){

var oldHandler = elem[“on” + type];

elem[“on” + type] = function(){

oldHandler();

handler();

}

}

else{

elem[“on” + type] = handler;//支持添加多個事件處理器

}

}

},

getEvent : function(event){

return event ? event : window.event;

},

getTarget : function(event){

return event.target || event.srcElement;

},

preventDefault : function(event){

if(event.preventDefault){

event.preventDefault();

}

else{

event.returnValue = false;

}

},

removeHandler : function(elem, type, handler){

if(elem.removeEventListener){

elem.removeEventListener(type, handler, false);

}

else if(elem.detachEvent){

elem.detachEvent(“on” + type, handler);

}

else{

elem[“on” + type] = null;//不支持移除單一事件處理器,只能全部移除

}

},

stopPropagation : function(event){

if(event.stopPropagation){

event.stopPropagation();

}

else{

event.cancelBubble = true;

}

},

getRelatedTarget : function(event){

if(event.relatedTarget){

return event.relatedTarget;

}

else if(event.toElement event.type == “mouseout”){

return event.toElement;

}

else if(event.fromElement event.type == “mouseover”){

return event.fromElement;

}

else{

return null;

}

},

/*IE8點擊左鍵和中鍵都是0;FF無法識別中鍵;Chrome正常*/

getButton : function(event){//返回0,1,2 – 左,中,右

if(document.implementation.hasFeature(“MouseEvents”, “2.0”)){

return event.button;

}

else{

switch(event.button){

case 0:case 1:case 3:case 5:case 7:

return 0;

break;

case 2:case 6:

return 2;

break;

case 4:

return 1;

break;

default:

break;

}

}

},

/*只能檢測keypress事件,返回值等於將要顯示的字符編碼*/

/*IE和Chrome只有能顯示的字符鍵才觸發,FF其它鍵也能觸發,返回值為0*/

getCharCode : function(event){

if(typeof event.charCode == “number”){

return event.charCode;

}

else{

return event.keyCode;

}

}

};

綜合示例

如果項目中沒有使用諸如 jQuery 之類的庫,如何方便地為元素綁定事件,併兼容各種瀏覽器呢?下面這個簡單的 Utility 應該可以考慮。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

var eventUtility = {

addEvent : function(el, type, fn) {

if(typeof addEventListener !== “undefined”) {

el.addEventListener(type, fn, false);

} else if(typeof attachEvent !== “undefined”) {

el.attachEvent(“on” + type, fn);

} else {

el[“on” + type] = fn;

}

},

removeEvent : function(el, type, fn) {

if(typeof removeEventListener !== “undefined”) {

el.removeEventListener(type, fn, false);

} else if(typeof detachEvent !== “undefined”) {

el.detachEvent(“on” + type, fn);

} else {

el[“on” + type] = null;

}

},

getTarget : function(event) {

if(typeof event.target !== “undefined”) {

return event.target;

} else {

return event.srcElement;

}

},

preventDefault : function(event) {

if(typeof event.preventDefault !== “undefined”) {

event.preventDefault();

} else {

event.returnValue = false;

}

}

};

使用方法示例:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

var eventHandler = function(evt) {

var target = eventUtility.getTarget(evt),

tagName = target.tagName;

if(evt.type === “click”) {

if(tagName === “A” || tagName === “BUTTON”) {

alert(“You clicked on an A element, and the innerHTML is ” + target.innerHTML + “!”);

eventUtility.preventDefault(evt);

}

} else if(evt.type === “mouseover” tagName === “A”) {

alert(“mouseovered ” + target.innerHTML);

}

};

eventUtility.addEvent(document, “click”, eventHandler);

eventUtility.addEvent(document, “mouseover”, eventHandler);

eventUtility.removeEvent(document, “mouseover”, eventHandler);

javascript 跨瀏覽器操作文件系統

客戶端js不允許操作文件系統的。IE下也是要經過特別允許-把安全級別降到無。

FF和Chrome下禁止操作文件系統,如果需要操作,用js寫成一個FF/Chrome插件,經過插件管理允許安裝之後才允許操作。

原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/129436.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
簡單一點的頭像簡單一點
上一篇 2024-10-03 23:26
下一篇 2024-10-03 23:26

相關推薦

  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 如何解決web瀏覽器雙擊事件時差

    本文將從以下幾個方面對web瀏覽器雙擊事件時差進行詳細闡述,並提供解決方法。 一、雙擊事件延時設置 1、問題描述:在web瀏覽器中,雙擊事件默認會延時一定的時間才能觸發該事件,這個…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的“畫筆”在窗口中繪製…

    編程 2025-04-29
  • Python櫻花樹代碼簡單

    本文將對Python櫻花樹代碼進行詳細的闡述和講解,幫助讀者更好地理解該代碼的實現方法。 一、簡介 櫻花樹是一種圖形效果,它的實現方法比較簡單。Python中可以通過turtle這…

    編程 2025-04-28
  • 使用Python模擬手機瀏覽器的方法

    解答如何使用Python模擬手機瀏覽器,並且給出示例代碼。 一、安裝Selenium庫 使用Python模擬手機瀏覽器需要使用Selenium庫。 首先,使用pip命令進行安裝: …

    編程 2025-04-28
  • 谷歌瀏覽器窗口大小調整

    谷歌瀏覽器是當今最流行的網絡瀏覽器之一,它的窗口大小調整是用戶操作其中的一個重要部分。本文將從多個方面對谷歌瀏覽器窗口大小調整做詳細的闡述。 一、窗口大小調整的基礎操作 谷歌瀏覽器…

    編程 2025-04-28
  • 如何在電腦上下載安裝谷歌瀏覽器?

    想要在電腦上使用谷歌瀏覽器,我們需要先進行下載和安裝。下面,本文將從多個方面詳細闡述如何在電腦上下載安裝谷歌瀏覽器。 一、到谷歌瀏覽器官方網站下載 谷歌瀏覽器官方網站是我們下載谷歌…

    編程 2025-04-28
  • Python大神作品:讓編程變得更加簡單

    Python作為一種高級的解釋性編程語言,一直被廣泛地運用於各個領域,從Web開發、遊戲開發到人工智能,Python都扮演着重要的角色。Python的代碼簡潔明了,易於閱讀和維護,…

    編程 2025-04-28
  • 用Python實現簡單爬蟲程序

    在當今時代,互聯網上的信息量是爆炸式增長的,其中很多信息可以被利用。對於數據分析、數據挖掘或者其他一些需要大量數據的任務,我們可以使用爬蟲技術從各個網站獲取需要的信息。而Pytho…

    編程 2025-04-28

發表回復

登錄後才能評論