Safari での問題。 先のエントリーにも関係するのだけれども、"GPX Editor JS" で、フォームのあるオブジェクトの prototype を設定して使っていたら、あるとき JavaScript エラーが出ていることに気がついた。トリガーは、 Google Maps のズームの変更時で、ただそれによって動作しないとかいう問題は見られなかった。 JavaScript を書く時には、テストに Firefox (むかしだったら Netscape )を使う。これは JavaScript コンソールが便利だからだ。テスト中にはいつも JavaScript コンソールを開いておくので、何かエラーが出ればすぐ気がつくのだけれども、でもその問題は、 Firefox の JavaScript コンソールには出て来なかった。 ときに Safari にも JavaScript コンソールがいちおう(
The Prototype 1.5.1 makes Safari crash. 最近リリースされた prototype.js のバージョン 1.5.1 は、うちの Safari ( Safari 1.3.2 )をクラッシュさせる。 困った。機能が使えないということはさておいて、 Prototype はとてもポピュラーなライブラリだから、あちこちのサイトで利用されているだろう。つまり、あちこちのサイトで、うちのブラウザがクラッシュしてしまうことに、なるだろうから。 それを発見したのは、 Prototype を拡張するほかのライブラリを試してみた時だった。とてもよいライブラリだったのでぜひ使いたかったのだけれども、どうしてもクラッシュする。がっかりした。 でもやっぱり使いたいほうが勝って、せめてどこが悪いのかその場所だけでも突きとめて、作者に「 Safari を見捨てないで」と言う願いをこめた
replaceメソッドをhackしてsafariでもreplace callbackを使えるようにしてみた。Safari バージョン 2.0.2(416.13)で上手く動いたそうです。手元に環境が無いので細かい検証はできませんが、とりあえず。 http://la.ma.la/misc/js/replace_callback/ 解説JavaScriptのString#replaceメソッドは文字列を置換して新しい文字列を返すメソッドですが、第二引数に置換後の文字列を指定する代わりにfunctionオブジェクトを渡してやると、Perlでいうところのeオプションみたいなことができます。 // 大文字を小文字に、小文字を大文字に String.prototype.swapcase = function(){ return this.replace(/([a-z])|([A-Z])/g,functi
JavaScriptのDateオブジェクトはdate.setMonth(-1)とやると、前年の12月にしてくれて大変便利なのですが、Safariで上手く動かなかったりするようなのでprototype上書きで対処してみました。 // fix safari's Date#setMonth (function(){ var set_month = Date.prototype.setMonth; Date.prototype.setMonth = function(num){ if(num <= -1){ var n = Math.ceil(-num); var back_year = Math.ceil(n/12); var month = (n % 12) ? 12 - n % 12 : 0 ; this.setFullYear(this.getFullYear() - back_year)
Safari の Date#setMonth にバグがあると聞いて試してみたところ、そもそも Date コンストラクタからして月の負数指定に対応していない様子。やれやれ仕方のない子だな WebKit はというわけで Date オブジェクト自体を書き換えるスクリプトを書いてみた。適用すると Date コンストラクタ、 Date.UTC、 Date#setMonth、 Date#setUTCMonth、 Date#setFullYear、 Date#setUTCFullYear で月を指定する際に負数を使えるようになる。 fix-webkit-date.js Date オブジェクトに関するテストケース (修正確認用) 書いている途中で気づいたのだが、WebKit、というより JavaScriptCore では関数の引数と arguments オブジェクトのプロパティが値を共有しない。つまり、f
Internet Explorer の CSS 実装に怒る人は Safari の JavaScript 実装にも怒るべきだ、と思ったんだけど、シェアがあるのにバグがあるから困るわけで、シェアが無くてバグがあるなら無視すればいい気がしてきた。 そのくらいひどいです。 正規表現で "//" のエスケープが使えない fladdict.net blog: 今見ているサイト内で「はてなブックマーク」されてるエントリ一覧を表示するブックマークレット さっそく使ってみようとしたらsafariのおバカが… matchで引っかかっているようです.正規表現中のスラッシュのエスケープ(//)をバックスラッシュ(\/)に変更したら動きました.他のブラウザではふつうに動くのになぁ.一応ご報告です. "?" より前の "\" は "/" になる これで Bookmarklet、なぜかSafariで読めないな… - o
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く