【问题标题】:Check if something works检查某些东西是否有效
【发布时间】:2012-06-04 06:03:48
【问题描述】:

我正在尝试测试特定浏览器上可用的内容(JavaScript 方面)。

例如,如果我只是输入这个:

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

这是否会返回关于属性是否有效的真实答案?

【问题讨论】:

  • 取决于您要测试的内容。如果要测试setAttribute方法是否存在,那么不存在,不存在就会报错。

标签: javascript testing cross-browser


【解决方案1】:

如果你想测试某个属性是否有效,而不是setAttribute 是否有效,那么这是错误的方法,因为setAttribute 总是返回undefined(== false)。相反,测试元素是否具有属性名称作为键 - 并使用新元素而不是从 DOM 中提取的元素,因为 DOM 中的元素可能已被修改。

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

我添加了within 参数,因为某些属性只存在于某些类型的元素上:例如,如果您总是针对<div> 进行测试,那么该函数将为href 返回false

如果你想测试setAttribute 函数是否有效,这仍然是错误的方法,因为如果setAttribute 没有实现,尝试执行它会抛出错误而不是返回false。我们可以使用与上面相同的方法,简化我们已经知道参数:

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

【讨论】:

    【解决方案2】:

    我猜如果不支持“setAttribute”,您那里的代码将会失败。

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

    这将检查 setAttribute 方法是否可用于 dom 元素。

    【讨论】:

    • Object.prototype.setAttribute = 1;。我保证我不会这样做,但我不能代表互联网上的其他人发言。
    【解决方案3】:

    没有。假设浏览器支持document.getElementByIdsetAttribute,它只会设置name 属性。作为那个方法returns void(这是假的),它总是会提醒"Your browser does not support it."——除非抛出异常。

    它也不会检查浏览器是否支持name属性。

    【讨论】:

      猜你喜欢
      • 2012-05-11
      • 2014-05-12
      • 2012-03-12
      • 1970-01-01
      • 1970-01-01
      • 2022-11-29
      相关资源
      最近更新 更多