私が作った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メソッドを直接呼び出してください。
コメント 0