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>
这是小提琴:
答案 0 :(得分:1)
实际上,iOS 6似乎是Safari的第一个版本,它没有遭受允许某些原生DOM属性(如宽度)被覆盖的错误,即使它们是不可配置的。
在所有版本的Safari(移动设备或其他版本)中,我已经能够测试,宽度属性(以及其他几个)是不可配置的(即可配置:false)。尽管如此,桌面上的当前版本的Safari以及iOS 5.1及更低版本的移动版Safari将很乐意为width属性提供一个新的描述符。在iOS 6中,描述符得到尊重。
值得一提的是,可配置的用户设置属性受到尊重,只是这些预设属性存在问题。
对于其他浏览器,Chrome会将这些属性设置为可配置,并且Firefox似乎不会将描述符与属性相关联,这就是您在这些浏览器上没有问题的原因。我没有测试IE。
在我看来,真正的问题是Safari将这些属性设置为不可配置,并且在iOS 6中终于开始关注它。