web-dev-qa-db-ja.com

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

私は、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がリリースされ、この問題は修正されました。

詳しくは 彼らのブログで、ここ を読んでください。

507
PeeHaa

どうしたの!?

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

うまくいけばjQueryがそれに触れるのをやめるようにコードを更新するでしょうが、同時にWebKitはイベントに関する非推奨警告を記録するよりはもっとよく知っているべきです(少なくとも私の意見では)。 1つのmousemoveハンドラとあなたのコンソールが爆発します。 :)

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

更新:jQuery 1.7にアップグレードした場合、これは修正されました。

JQueryがアップグレードしても問題が解決しない場合は、Jakeが彼の 回答 で述べたように、使用されている拡張機能/プラグインと関係があるかもしれません。

463
Adam A

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;
}());

UPDATE

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

74
David Murdoch

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

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

大量のこれらのメッセージ (私はちょうどGmailを使用している間それらの80000を得ました) Chromeのバグです。

Chromiumの 問題にスターを付ける必要があります

21
törzsmókus

Chromeの拡張機能が原因である可能性もあるので、jQueryの更新が機能しない場合はそれらを確認してください。

14
Jake

任意のイベントを呼び出した後にこれを使用しました。

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

それは私のために働いた、私は私のコードにこのパッチを作ったので私は警告メッセージを持っていない。

5
jca258

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

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

他の回答にリストされている設定の問題と同様に、このエラーはあなた自身のコードの簡単なエラーによって引き起こされる可能性があります:jQuery IDセレクタからの '#'を忘れること。

コードはこんな感じでした

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

( "datenotset"の前にある#を抜けています)

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

4
xgretsch

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

私が最初にlayerXやlayerYのインスタンスを探すためにコードベースを検索するという私の最初の考えが役に立たなかったので、私はここでそれに言及します - 特性は名前ではなく総称的に参照されていました。

3
Kris Giesing