0

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/

4

1 回答 1

1

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

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

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

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

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

于 2012-11-21T08:28:52.573 回答