印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
MovableType 汎用ブックマークレットは可能か?

bricklife.weblog."Safari「でも」使える MT Bookmarklet" には、ブラウザの違いを吸収するテキスト選択型のブックマークレットが紹介されている。しかし、残念ながら仕様によりIE6では動作しない。

■ ■ ■

ブラウザ内のテキストを選択してブックマークレットを起動すると、Javascript の命令をひとつずつ試して、内容が空でなかったらそれを選択テキストとして採用し、その後の処理にまわすというもの。「ブラウザによって選択テキストを取得する関数が違う」という問題を解決しようという試みである。

  • document.selection() はIE4 で実装された関数
  • document.getSelection() は NN4 で実装された関数(Mozilla でも可)
  • window.getSelection() は Safari で有効な関数

元ネタはJAVASCRIPT::BOOKMARKLETであるとのことだが、このように解説してくれるのは嬉しい。

コメントに IE6SP2 では動作しないとある。色々試してみたところ、Internet Explorer 6 で動作しない理由は、スクリプトが長すぎるためであることが分かった。IE6 には文字数制限があるようで、508 文字までしか動作しないのである。509 文字以上にすると、動作しないだけでなく、構文エラーであってもエラーメッセージも出さないという中途半端な仕様になっている。仕様というよりは不具合に近い。

508 文字をキーにして探してみると、Bookmarklet - ブックマークレットを作成する際のポイントに解説されていた。IE5.5 であれば 508 文字以上でもよいらしい。しかし IE5.5 のサポートは終了しているのであった(Microsoft Internet Explorer : Internet Explorer 5.x ダウンロード)。

さらに、Redaktionstool - fett, kursiv JavaScript bei phpforum.de dem deutschen PHP-Forum によれば、window.selection() による取得もあるようなので、総合すれば次のようになるだろうか(実際は1行)。

javascript:d=document;w=window;
  if(d.selection){t=d.selection.createRange().text;}
  else if(w.selection){t=w.selection.createRange().text;}
  else if(d.getSelection){t=d.getSelection();}
  else if(w.getSelection){t=w.getSelection();}
  else{t='';}
  void(window.open ...

長くなる一方である。

2005年8月21日追記:
Java スクリプト本体をネットワーク上の参照できるところに置いて,その URL を指定することで,文字数の制限にとらわれずに長いスクリプトを書くことができるアイデアを見つけました(川o・-・)<2nd life - bookmarkletの文字数制限を無くす)。

Posted by n at 2004-02-27 17:47 | Edit | Comments (3) | Trackback(3)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Safari「でも」使える MT Bookmarklet リターンズ
ご好評の「bricklife.weblog."Safari「でも」使える MT Bookmarklet"」なんですが、IE6 以降だと動かない場合があることが判明しました。原因は「nlog(n)」の n さんがつきとめてくれました。 nlog(n): 汎用ブックマークレットは可能か? Internet Explorer 6 で... Trackbacked from: bricklife.* at March 10, 2004 03:12
選択テキストを取得する方法
選択テキストを取得する方法のサンプルとしてブックマークレットを作ってみました。 取得方法は下記ソースの"//IE4〜"などと書いてあるif/else部分が各ブラウザの方法になります。 ブックマークレット: 選技D^~〓 Trackbacked from: JavaScriptな日々 at October 28, 2006 21:53
第11回:引用(blockquote)を簡単にするブックマークレット
前に書いたリンクタグを生成するブックマークレットにも関連するんだけど、ブログを書... Trackbacked from: creazy photograph at August 29, 2007 08:30
Comments

トラックバックありがとうございます。
調べる時間がなくほおって置いたんですが、
調査していただいたとは恐縮です(^^;
文字制限があったんですね。
収まるように直してみます。

Posted by: ooba at February 27, 2004 17:52

あ、といっても、サーバのURLで長さ変わっちゃうんでした(^^;
やっぱり別々のBookmarkletにしたほうがよさそうです、残念ですが。

Posted by: ooba at February 27, 2004 18:11

ドメイン名を思い切り短くして、オプションをできるだけ少なくすればできるかも知れませんが、正しい道ではないような気がします。

Posted by: n at February 27, 2004 18:19
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?