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>
Вот скрипка:
1 ответ
На самом деле iOS 6 является первой версией Safari, которая не страдает от ошибки, которая позволяет перезаписывать определенные свойства DOM (например, width), даже если они не настраиваются.
Во всех версиях Safari (мобильной или другой), которые я смог протестировать, свойство width (и некоторые другие) не настраиваются (то есть настраивается: false). Несмотря на это, текущая версия Safari на десктопе и версии мобильного сафари на iOS 5.1 и ниже позволят дать свойству width новый дескриптор. В iOS 6 дескриптор соблюдается.
Стоит упомянуть, что настраиваемые параметры учитываются для свойств, заданных пользователем, проблема заключается только в этих предустановленных свойствах.
Что касается других браузеров, Chrome устанавливает эти свойства как настраиваемые, и Firefox, по-видимому, не связывает дескрипторы со свойствами, поэтому у вас нет проблем в этих браузерах. Я не проверял IE.
Реальная проблема, как мне кажется, заключается в том, что Safari устанавливает эти свойства не настраиваемыми, и в iOS 6 наконец-то начал обращать на это внимание.