DefineProperty для элементов не работает в iOS6?

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 ответ

На самом деле iOS 6 является первой версией Safari, которая не страдает от ошибки, которая позволяет перезаписывать определенные свойства DOM (например, width), даже если они не настраиваются.

Во всех версиях Safari (мобильной или другой), которые я смог протестировать, свойство width (и некоторые другие) не настраиваются (то есть настраивается: false). Несмотря на это, текущая версия Safari на десктопе и версии мобильного сафари на iOS 5.1 и ниже позволят дать свойству width новый дескриптор. В iOS 6 дескриптор соблюдается.

Стоит упомянуть, что настраиваемые параметры учитываются для свойств, заданных пользователем, проблема заключается только в этих предустановленных свойствах.

Что касается других браузеров, Chrome устанавливает эти свойства как настраиваемые, и Firefox, по-видимому, не связывает дескрипторы со свойствами, поэтому у вас нет проблем в этих браузерах. Я не проверял IE.

Реальная проблема, как мне кажется, заключается в том, что Safari устанавливает эти свойства не настраиваемыми, и в iOS 6 наконец-то начал обращать на это внимание.

Другие вопросы по тегам