JavascriptとBookmarkletとクロスブラウザで悩む話

 サイト更新をしばらく休んで、Bookmarklet作成にいそしむ今日この頃。で、悩みまくっている。
 あるサイトで公開されてたBookmarklet(ブックマークレット)を元に機能を加えていってるのですが。IEだとうまく動くものがFirefoxでは動かない。
 どうやら原因は、getAttributeNode。ページ内のaタグのhref属性を拾うのにgetAttributeNode(‘href’).valueなんてするのですが、aタグにはアンカーとしての役割もあるので、必ずしもこの値があるとは限らない。
 これがない場合でも、IEは無視して続きをやってくれるのだけど、Firefoxはプロパティがないとかいうエラーでとまってしまう。そこで、getAttributeNode(‘href’)が真かどうかを調べて(ifで判断)、その後の処理を行う、なんてしてみる。これで、OK。ここまででかなりの時間を費やす。
 じゃあ、Macでもテスト。IE、FirefoxともOK。ただし、Safariがだめ。ほげー。
 ページ内に記述してみると問題なく動作する。ということで、Safariが持ってない機能を使っているわけではなさそうだ。でも、BookmarkletにするとOUT。
 Syntaxなエラーとパースエラー(Parse error)なんてのがコンソールに出てくる(SafariはターミナルからDebugをONにしてある)。なんか、Bookmarkletならではの書き方、みたいのがSafariでは必要なのかなあ?
 と思ったりしてて。あとで気づいたのだけど、今回の用途の場合、getAttributeNodeではなくてgetAttributeで事足りることが後に判明。多少はIEの文字数制限も回避が楽に。これはこれで無駄な時間をすごしたなあ。
標準HTML、CSS&JavaScript辞典 どっちにしてもSafari問題が解決してない。とりあえず、メモ。参考にしてる本はDOMのことなんて書いてないので、別のを買うしかないかなあ。Webで検索するのにもつかれてきた。まあ、書籍に必要な情報があるかどうかはわからんけれども、一冊はリファレンスが必要だろうなあ。今持ってるJavaScript関連の本は「標準HTML,CSS&JavaScript辞典」ってのだけ。
詳解JavaScript辞典 書店で見た限りではSafariやFirefoxへの対応にも触れてて、しかもDOMについてもしっかり書いてそうなのは、「詳解JavaScript辞典」ってやつなんだけど、Amazonのレビュー(画像からリンク)はあまり評判がよくない。さて、どうしよう。

コメント