問題
以下の問題は FireFox 1.0.4 リリースで既にフィックスされています。この文書はバージョン 1.0.3 のみに適用されます。
FireFox 1.0.3 では変更され、これは前のバージョンで適切に動作していたページ上にあらわれる以下のエラーの原因となります:
Error: uncaught exception: [Exception... "Illegal operation on WrappedNative prototype object" nsresult: "0x8057000c (NS_ERROR_XPC_BAD_OP_ON_WN_PROTO)" location: "JS frame :: file_url :: anonymous :: line 789" data: no]
もし、あなたがこのエラーに遭遇した場合、解決法は 2 つあります。
解決法:"file_url"はクロームに関連したファイルである場合
変更は FireFox 1.0.3 で実施されました。それは、いかにしてクロームから DOM の内容にアクセスするかについての変更です。これらの変更とあなたが書く必要あるコードの変更について、 クロームからの DOM の内容への安全なアクセスについての概要に記載されています。
解決策/動作環境:"file_url"が"非クローム.js"または.html ファイルである場合
もしこの場合、FireFox 1.0.3 の主要なセキュリティをフィックスしている間、我々が不注意に紹介したバグの中で走らせることになります。これらのワークアラウンド(動作環境)は以下に記載します:
Geckoベースのブラウザ
var elementProto = Element.prototype; elementProto.__proto__ = { get text() { return this.firstChild.nodeValue; }, __proto__: elementProto.__proto__ };
Note: get text() {...}
シンタックスは、非 Gecko ブラウザでは機能しません。
すべてのブラウザ
var elementProto = Element.prototype; var elementGrandProto = elementProto.__proto__ = { __proto__: elementProto.__proto__ }; elementGrandProto.__defineGetter__('text', function () { return this.firstChild.nodeValue; } );
注記: もしあなたが、あらかじめ定義されたプロトタイプの属性を上書きしようとするならば、これらの例で処理したように、その後の代わりに DOM のプロトタイプの先頭にそれらのバニラオブジェクトを置く必要があるかもしれません。この場合、すべてのブラウザに対して DOM のプロトタイプをリセットすることは注意して下さい。 ( FireFox 1.0.3 に対してだけは、ユーザエージェントと Element.prototype
のリセットを検出する必要があります。他のブラウザは __proto__
をサポートしません。そのため、既存のプロトタイプチェインに挿入しないで下さい)
さらなる情報
追加情報は、 バグ 290777を参照して下さい。