2012-05-30 201 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属性。