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 は、特定のネイティブ DOM プロパティ (幅など) が構成不可能な場合でも上書きされるバグに悩まされていない Safari の最初のバージョンのようです。

私がテストできた Safari のすべてのバージョン (モバイルまたはその他) では、width プロパティ (およびその他のいくつか) は構成可能ではありません (つまり、構成可能: false)。それにもかかわらず、デスクトップの Safari の現在のバージョン、および iOS 5.1 以前のバージョンのモバイル Safari では、喜んで width プロパティに新しい記述子を与えることができます。iOS 6 では、記述子が尊重されます。

言及する価値のあることの 1 つは、構成可能はユーザー セット プロパティに対して尊重されるということです。問題があるのはこれらのプリセット プロパティだけです。

他のブラウザーと同様に、Chrome はこれらのプロパティを構成可能に設定し、Firefox は記述子をプロパティに関連付けないように見えるため、これらのブラウザーでは問題が発生しません。私はIEをテストしませんでした。

本当の問題は、Safari がこれらのプロパティを設定できないように設定しているように私には思えますが、iOS 6 ではついにそれに注意を払い始めました。

于 2012-11-21T08:28:52.573 に答える