この質問は、 IE に関するこの StackOverflow の質問を Opera 12 ブラウザーに拡張したものです。
根本的な問題は、kmz (圧縮された kml) ファイルを処理する geoxml3の問題です。
バイナリ データは、変更されたバージョンの ZipFile.complete.js でTypedArrays を使用して処理されています。
バイナリ ファイルが転送された後、Uint8Array は Opera 12 で正しく設定されず、あたかもデータが 16 ビット要素としてインポートされているかのようになります。
リクエストは次のように構成されます。
this.req.responseType = 'arraybuffer';
this.req.overrideMimeType('text/plain; charset=x-user-defined');
返される値は次のように処理されます。
var fileContents = binStream.req.response;
binStream.length = fileContents.byteLength;
binStream.array = new Uint8Array(fileContents);
最初の 8 バイトは、Opera 12 では次のように入力されます。
0x004B0050; 4915280 の 10 進値を与える
ただし、次のようにする必要があります。
0x4034B50; 67324752 の 10 進数値。
これは、Firefox、Chrome、および IE で正しく機能します (回避策あり)。
Uint8Array を正しく設定するように Opera 12 を説得する方法を知っている人はいますか? または、それが機能するようにするための回避策(16ビットバイトの配列を8ビットバイトの配列に変換し、不要な上位8ビットをできるだけ効率的に破棄する方法)?これは Opera 12 の TypedArray/XmlHttpRequest の最近の実装における既知のバグですか?