7

何らかの理由で、Internet Explorer 8 の jquery.js (バージョン 1.4.3、非圧縮バージョン) の 3156 行目に次の Javascript エラーが表示されますObject doesn't support this property or method。Firefox および Google Chrome ではエラーは発生しません。

これは、エラーが発生する行です。

if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {

調査 ( console.log(Expr.leftMatch[type])) により、次の興味深い結果が生成されます。Google Chrome では、次のように出力されます。

/(^(?:.|\r|\n)*?):((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\3\))?(?![^\[]*\])(?![^\(]*\))/

ただし、Internet Explorer では、次の出力が表示されます。

function() {
  var p = this;
  do p = p.previousSibling;
  while (p && p.nodeType != 1);
  return p;
}

呼び出すことはexecできません (未定義です)。引用された関数は jquery.js 内に存在しません。なぜこれが起こるのか、またはそれを解決するために何ができるのか、誰にも手がかりがありますか?

残念ながら、問題を再現するための簡単なスクリプトをまだ作成できていませんが、同じ問題を抱えている人のこの投稿を見つけましたが、解決策は提供されていません (最後の投稿では、ページを実行する必要があることが示唆されています標準モードですが、私はすでにそうです)。

4

3 に答える 3

8

結局のところ、私は数時間の苦労の末、なんとか自分でそれを理解することができました. 他の場所で定義した場合、Sizzle セレクター エンジンがこの予期しない方法で (Internet Explorer でのみ) 壊れているようですObject.prototype.previousObject

その宣言を削除するか、名前previousObjectを別のものに変更すると、問題が解決します。

面白いことに、私もそのコードを自分で入れましたが ( Object.prototype.previousObject = [the function in my question])、コードを認識できませんでした。

まあ、それは開発の可能性に満ちた別の日です。

于 2010-10-19T13:53:21.720 に答える
3

「継承」と呼ばれるメソッドを Object.prototype に追加しようとすると、同じ動作が発生することがわかりました。Object.prototype.inherited = <some func>

IE6、7、および 8 に影響しますが、IE9 (ベータ) では修正されているようです。

于 2010-12-06T14:51:45.337 に答える