2012-05-30 202 views
1

我試圖測試特定瀏覽器(JavaScript方式)上的可用功能。檢查是否有效

如果我剛纔輸入此,例如:

function checksetAttribute(){ 
    if(document.getElementById("blar").setAttribute("name","blarDiv")){ 
     alert("Your browser supports it."); 
    } 
    else{ 
     alert("Your browser does not support it."); 
    } 
} 

這會返回一個真正的答案,屬性(IES)是否不行?

+2

取決於你想測試什麼。如果你想測試'setAttribute'方法是否存在,那麼否,如果它不存在就會拋出一個錯誤。 –

+0

你想檢查什麼? – Bergi

回答

2

如果要測試某個屬性是否有效,而不是setAttribute是否有效,那麼這是錯誤的方法,因爲setAttribute總是返回undefined(== false)。相反,測試元素是否具有屬性名稱作爲鍵 - 並使用新元素而不是DOM中的元素,因爲DOM中的元素可能已被修改。

function attributeWorks(attr, within) { 
    return document.createElement(within || 'div').hasOwnProperty(attr); 
} 

我加入了within參數,因爲某些屬性只對特定類型的元素存在:例如,如果你總是測試針對<div>,則該函數將返回falsehref

如果你想測試setAttribute函數是否工作,這仍然是錯誤的方法,因爲如果setAttribute沒有實現,試圖執行它會拋出一個錯誤而不是返回false。我們可以用同樣的方法如上,與我們已經知道的參數簡化:

function setAttributeWorks() { 
    return document.createElement('div').hasOwnProperty('setAttribute'); 
} 
0

我猜測你的代碼,如果「的setAttribute」不支持會有失敗。

var a = document.createElement("div"); 
if(a.setAttribute){ 
    alert("VERY SUPPORTED"); 
}else{ 
    alert("Not supported"); 
} 

這會檢查setAttribute方法是否可用於dom元素。

+1

'Object.prototype.setAttribute = 1;'。我保證我不會這樣做,但我無法說出其他互聯網。 –

0

否。假設瀏覽器支持document.getElementByIdsetAttribute,它只會設置name屬性。由於該方法returns void(這是虛假的),它將始終提醒"Your browser does not support it." - 除非拋出異常。

它既不會檢查瀏覽器是否支持name屬性。