IE8 でこの奇妙な問題に遭遇しましたが、これ以上の詳細を見つけることができないようです。当然のことながら、JavaScript オブジェクトを作成する場合は、動的に定義することでプロパティを簡単に追加できます。
var rect = {};
rect.x = 200;
偉大な。IE8 では (他の IE が何であるかはわかりません)、次のようなメソッドを呼び出すと、次のようになります。
var span = document.getElementById('my-span');
var rect = span.getBoundingClientRect();
rect.x = Math.round( rect.left );
その後、「オブジェクトはこのプロパティまたはメソッドをサポートしていません」という IE エラーが表示されます。これはもちろん、私が独自のオブジェクトを JavaScript で個人的に定義した最初のケースでは起こりません。最も簡単な回避策は、これを行うことです。
var clientRect = span.getBoundingClientRect();
var rect = { top: clientRect.top, left: clientRect.left, right: clientRect.right, bottom: clientRect.bottom };
rect.x = Math.round( rect.left );
それは問題ありません。getBoundingClientRect()
しかし、私が疑問に思っているのは、メソッドによって返されたこのオブジェクトに IE8 でフィールド/プロパティ/属性 (正しい JS 用語がわからない) を動的に追加できないのはなぜですか? プロパティを追加する別の (正しい) 方法はありますか? これは、オブジェクトからメソッドによって返されるすべてのオブジェクトで発生しwindow
ますか? これは文書化されていますか?それともバグですか?(その場合、回避策を講じて先に進みます)。