是否在iOS6中打破了元素的defineProperty?

时间:2012-10-18 10:00:25

标签: javascript ios6 defineproperty

JavaScript的defineProperty和__defineSetter不适用于iOS6中的元素。它适用于所有其他浏览器和以前版本的iOS。有人知道更多吗?

<input id='Button1' type="button" value="test" onclick="test()">
<script>
Object.defineProperty(Button1,'width',{set: function(x){
    Button1.style.width=x},
    enumerable: true,
    configurable: true});

function test(){
  Button1.width="100px";
  alert(Button1.style.width);
  }
</script>

这是小提琴:

http://jsfiddle.net/ghenne/pnL7p/

1 个答案:

答案 0 :(得分:1)

实际上,iOS 6似乎是Safari的第一个版本,它没有遭受允许某些原生DOM属性(如宽度)被覆盖的错误,即使它们是不可配置的。

在所有版本的Safari(移动设备或其他版本)中,我已经能够测试,宽度属性(以及其他几个)是不可配置的(即可配置:false)。尽管如此,桌面上的当前版本的Safari以及iOS 5.1及更低版本的移动版Safari将很乐意为width属性提供一个新的描述符。在iOS 6中,描述符得到尊重。

值得一提的是,可配置的用户设置属性受到尊重,只是这些预设属性存在问题。

对于其他浏览器,Chrome会将这些属性设置为可配置,并且Firefox似乎不会将描述符与属性相关联,这就是您在这些浏览器上没有问题的原因。我没有测试IE。

在我看来,真正的问题是Safari将这些属性设置为不可配置,并且在iOS 6中终于开始关注它。