SSブログ

私が作ったFirefoxのブックマークレットがsubstr()の所で無反応になる。 [メール投稿]

正己さんはTwitterを使っています: "ブックマークレットを作ってるのだけど、なぜか.substr()が使えない。.substring()も使えない。取り除くと反応するのだけど、書いておくと反応しない。何か間違ってるんだろうなぁ。"
...


 例えば、次のスクリプトのどこが間違っているのだろう?
javascript:(function(){var%20url=document.getSelection();if(url.substr(0,4)=='http'){window.open('view-source:'+url);}else%20if(url!=''){window.open('view-source:http://'+url);}else{window.open('view-source:'+document.location.href);}})();

 Firefoxのブックマークレット【URLのソースを表示】にしてクリックすると全く反応しない。
 次のように .substr(0,4) を取り除けば反応する。【未完成】
javascript:(function(){var%20url=document.getSelection();if(url=='http'){window.open('view-source:'+url);}else%20if(url!=''){window.open('view-source:http://'+url);}else{window.open('view-source:'+document.location.href);}})();

 このブックマークレットはほとんど必要なくなったけれど、原因が分からないと気持ち悪い。どこが間違っているのだろう?
 


次のようにすれば良いらしい。
[ソース表示]
javascript:(function(){var%20url=document.getSelection().toString();if(url.substr(0,4)=='http'){window.open('view-source:'+url);}else%20if(url!=''){window.open('view-source:http://'+url);}else{window.open('view-source:'+document.location.href);}})();

あるいは次のようにすれば良いらしい。
[ソース表示]
javascript:(function(){var%20url=document.getSelection()+"";if(url.substr(0,4)=='http'){window.open('view-source:'+url);}else%20if(url!=''){window.open('view-source:http://'+url);}else{window.open('view-source:'+document.location.href);}})();

最終的な情報源:
【.getSelection() | JavaScript 日本語リファレンス | js STUDIO】
空文字列""を追加、または.toStringを使用した、 いずれかの方法で文字列に変換した場合、このオブジェクトは選択されたテキストになります

JavaScriptでは、文字列を除くオブジェクトが関数 (window.alertやdocument.writeのような)に渡されると、 そのオブジェクトのtoString()メソッドが呼び出され、 その戻り値が関数に渡されます。 これは、プロパティとメソッドを持つ本当のオブジェクトの時に、 他の関数で文字列として表現させることが可能です。

lengthやsubstrのような、 JavaScriptの文字列プロパティまたはメソッドを直接使用しようとすると、 それらのプロパティやメソッドが無ければ、結果はエラーとなり、 期待する結果を得ることが出来ません。 文字列としてSelectionオブジェクトを使用するには、 toStringメソッドを直接呼び出してください

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:moblog

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。