event.layerXおよびevent.layerYに関するWebKitの問題


507

Chromeの最新の(カナリア)ビルドで大量の非推奨の警告が表示されることに気づきました。

event.layerXとevent.layerYは壊れており、WebKitでは非推奨です。それらは近いうちにエンジンから削除されます。

jQueryが物事を台無しにしているようです。

私が使用しています:jquery-1.6.1.min.js

最新のjQueryバージョンにアップグレードするのに役立ちますか、それともまだ修正されていませんか、それともChromeのバグですか、それとも何か他のものですか。

PS

一般的なエラーだと思うので、コードを表示することはできませんが、jQueryオブジェクトにアクセスしようとしたとき、またはjQueryがlayerX / layerYにアクセスしようとしたときに警告がスローされると思います(そうだとしたら、エラー:P)。

jQueryはおそらくそれらのプロパティをjQueryオブジェクトにコピーします。

そう...

どうしたの?

編集

jQuery 1.7がリリースされ、この問題が修正されました。

詳しくは、こちらのブログをご覧ください


1
今日もこれに気づきました。
Dusda、2011年

5
jQuery 1.7はまだスローされますが、警告はまだ修正されていないようです。……
クリッシュ

3
@ Stuart.Sklinar PHPでコーディングするかどうかはわかりませんが、PHPでコーディングする場合は、@エラーの抑制にも使用すると確信しています。
PeeHaa

1
中間のエラーがない場合にのみ、chromeは同様のエラーをグループ化します。だから問題は本当に、コンソールをデバッグに使うのがもっと面倒になるということです。それは刺激的ですが、jQueryの機能が実際に壊れているとはまだ思っていません
carpii

2
WebKitの(ことを、後世のために、注目に値することのバグ86264は)廃止に彼らの決定からオフに裏打ちされたlayerXlayerY、彼らはそれをより慎重に検討を与える少なくともまで、。IEが最近追加され layerXlayerYバージョン9まで使用できなくなったことも注目に値します。これらのプロパティは、少なくとも適切なW3Cの代替が提供されるまでは、なくなる予定ではないでしょう。警告はWebKitの最近のバージョンではなくなりました。
Nathan Wall

回答:


463

どうしたの!?

「jQueryはおそらくそれらのプロパティをjQueryオブジェクトにコピーします。」あなたは正確に正しいので、あなたはすでに知っているように聞こえます!:)

うまくいけば、jQueryがコードを更新してそれに触れないようにする一方で、WebKitは(少なくとも私の意見では)イベントの非推奨警告をログに記録するよりもよく知っているはずです。1つのマウスムーブハンドラーとコンソールが爆発します。:)

これが最近のjQueryチケットです:http : //bugs.jquery.com/ticket/10531

更新:jQuery 1.7にアップグレードすると、この問題は修正されました。

jakeが彼の答えで述べたように、jQueryをアップグレードしても問題が解決しない場合は、使用されている拡張機能/プラグインに何らかの問題がある可能性があることに注意してください。


8
jQuery 1.7の@Nealはチケットに応じて削除されます
センサー

7
私はまだjQ 1.7でそれらを見ます
ビクターS

22
そして、私はまだそれらをjQ 1.7.1で見ます。したがって、修正されていないようです。
Paparappa

3
1.7.1に同意し、警告が表示されなくなりました。ありがとう。
Jk_ 2011

3
すべての拡張機能を無効にしましたが、これらの警告が1.7.2でも表示されます
basZero

74

http://jsperf.com/removing-event-props/2

一時的な修正は、jQueryを介してイベントバインディングを行う前にこのコードを実行することです。

(function(){
    // remove layerX and layerY
    var all = $.event.props,
        len = all.length,
        res = [];
    while (len--) {
      var el = all[len];
      if (el != 'layerX' && el != 'layerY') res.push(el);
    }
    $.event.props = res;
}());

更新

最新のパフォーマンステストを参照して、イベントプロップを削除する最速の方法を見つけてください。


良いリンク!パフォーマンステストを変更しました。正規表現を使用すると、一部のテストが遅くなるように見えましたか?私が何かを壊さない限り、すべてのテストで===または!==を使用することは、最良のオプションを削除しながら+行うようです。 jsperf.com/removing-event-props/3
Adam A

追加のコードをダウンロードして実行するオーバーヘッドのほかに?いいえ。
デビッドマードック

異なるソリューションが一度しか実行されない場合のベンチマークのポイントは何ですか?この場合、シンプルでパフォーマンスよりもコードが少ないことが重要です。両方が必要な場合は、配列をlayerX / layerYのない値に置き換えてみませんか?パフォーマンスベンチを確認してください(とにかく問題ありません)。
mekwall 2012

28

これに対する最も短い解決策は、このワンライナーです:

$.event.props = $.event.props.join('|').replace('layerX|layerY|', '').split('|');

1
@Louis私はprototype.jsに慣れていないので、あまり役に立ちませんが、修正はこれと非常によく似ていると思います。質問を投稿し、誰かが知っていることを願っています:)
mekwall

21

これらの膨大な量のメッセージ(Gmailを使用しているときに80000通のメッセージを受け取ったばかりです)は、確かにChromeのバグです。

Chromiumで問題にスターを付けてください。


1
参考までに、この問題はほぼ1年間修正されました(つまり、警告がWebKitから削除されました)。それでもこの問題が発生する場合は、ブラウザーのアップグレードを検討してください。
törzsmókus

14

Chrome拡張機能が原因である可能性もあるため、jQueryの更新が機能しないかどうかを確認してください。


5

以下は、念のため、$。event.propsの元のインスタンス(配列である場合とそうでない場合がある)を置き換えずに、もう1行修正したものです。

$.each(["layerX","layerY"], function(i,v) { if((i=p.indexOf(v)) > -1) $.fn.splice.call($.event.props,i,1) })

5

イベントを呼び出した後、これを使用しました:

$.event.props.splice($.event.props.indexOf("layerY"),1);
$.event.props.splice($.event.props.indexOf("layerX"),1);

これでうまくいきました。コードにこのパッチを作成したので、警告メッセージは表示されません。


4

他の回答にリストされている構成の問題と同様に、このエラーは、jQuery IDセレクターからの「#」を忘れた、独自のコードの単純なエラーによってトリガーされる可能性があります。

私は次のようなコードを持っていました

$('datenotset_2341').click(function(){
 ....etc....
});

( "datenotset"の前の#がありません)

(明らかに)動作しないだけでなく、Chromeでこのエラーメッセージが表示されました。


3

私は自分のコードでこの問題に遭遇しました。使用していたデバッグ/検査ツールの一部として、イベントオブジェクトのすべてのプロパティを繰り返し処理していたことがわかりました。この特定の例では、jQueryの$ .extendを使用して後で検査するためにオブジェクトを複製していましたが、さまざまなツールキットの標準の反復手法のいずれかが警告をトリガーしたと思います。

ここで言及したのは、layerXまたはlayerYのインスタンスをコードベースで単に検索するという私の当初の考えは役に立たなかったためです。このプロパティは、名前ではなく総称的に参照されていました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.