是在iOS6中被破坏的元素的defineProperty?

问题描述:

JavaScript的defineProperty和__defineSetter不适用于iOS6中的元素。它适用于所有其他浏览器和以前版本的iOS。有人对此有更多了解吗?是在iOS6中被破坏的元素的defineProperty?

<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/

+0

你应该接受你的旧问题的答案。 – user1378730

+0

好点!我会通过他们并关闭任何可能的。 – ghenne

事实上,iOS 6中似乎是Safari浏览器的第一个版本,不从错误遭受允许某些原生DOM属性(如宽度)即使它们不可配置时也会被覆盖。

在所有版本的Safari(移动版或其他版本)中,我已经能够测试宽度属性(和其他几个)不可配置(即可配置:false)。尽管如此,桌面上Safari的当前版本以及iOS 5.1及更低版本的移动Safari浏览器版本都会很高兴地让宽度属性获得新的描述符。在iOS 6中,描述符受到尊重。

值得一提的一件事是,可配置是尊重用户设置属性,只是这些预设属性有问题。

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

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