という話

技術ブログにしたい

chromeでjQueryが「event.returnValue is deprecated. Please use the standard event.preventDefault() instead.」ってwarningになる件

正確には覚えていないがここ1.2週間位の話。

いつものようにChromeのDevToolで開発してたら突然jQuery
「event.returnValue is deprecated. Please use the standard event.preventDefault() instead.」って見たこと無いワーニングが出るようになった。

f:id:ichiy:20131122191019p:plain


別にエラーじゃ無いし動作にも問題ないから放置してたんですが、ページを開くたびにワーニングが表示されて、精神衛生的に非常によろしくないので調べました。


以下のページを見つけました。
jQueryを自前でbuildした話。 - ゆず日記


ここに書いてある通りです。
もう既に修正されてるけど、まだリリースされてないだけみたいです。
でもリリースも待てないし、自分でビルドとかめんどいのでワーニングの箇所だけ修正してみます。

jQueryの1.10.2だと5374-5375行目に以下のような記述があります。

this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
  src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;

ここがワーニングの該当箇所です。

で、上記の2行を消すなりコメントアウトして
https://github.com/silverwind/jquery/compare/patch-defaultPrevented
Githubで修正されている様に修正します。

//this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
//  src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
  this.isDefaultPrevented = src.defaultPrevented ? returnTrue : returnFalse;

たったこれだけでおk!
エラーもワーニングも無いエレガントなDevToolが戻ってきました!


minifyされてるソースの方は頑張って見つけるか、一旦圧縮されてない方を持ってきて修正してGoogle先生の圧縮ツールを利用するなりして圧縮しましょう。


ちなみに、何故前からあったバグが突然出るように表示されるようになったかはわかりませんでした。
おそらくChromeのアップデートだと思うのですが、そこまで踏み入ると抜けられなくなりそうなのでこの辺で。


2013/11/25追記:

コメントにて情報を頂きました。(ゆずえもん (id:Yuzuemon)さんありがとうございます!)
発生時期は2013年9月の初旬です。僕がchromeのアップデートさぼってただけです。
#14320 (Calling 'ev.preventDefault()' on latest Chrome Canary (31.0.1619.0) triggers a warning) – jQuery Core - Bug Tracker


ソースも既に修正されたものが公式であがってました。
http://code.jquery.com/jquery/
2系の最新2.1.0-bata2と、1系の最新1.11.0-beta2が修正済みのものです。確認したらちゃんと直ってました。
しかしコレは一応ベータなのでまた違ったバグやらが潜んでるかもなのでそこに留意しないとですね。