• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Bookmarkletに関して)

Bookmarkletに関する質問

このQ&Aのポイント
  • JavaScriptを用いてページ上の選択した部分のソースを取得して、あるページに送るBookmarkletを作成しようとしています。
  • IEでは思い通りの動作をするが、Firefox3では動かない問題が発生しています。
  • Firefox3上で選択した部分のソースを取得するBookmarkletを教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

すでに書かれていますが > javascript:(function(){javascript: この書き方がNGです。 > ページ上の選択した部分のソースを取得して とのことですが、 <p>あいうえお<span>かきくけこ</span>さしすせそ</p> というソースがあったとして、ブラウザ表示上で「えおかきく」の部分が選択された状態の時のソースというのは 「えお<span>かきく」 ということでしょうか? それはたぶん、すべてのブラウザでできないと思います。 var sel=getSelection(); if(sel!=undefiend && sel.rangeCount>0) var range=sel.getRagneAt(0); これで選択範囲が取得できるので、(私はwindow.getSlection()を使っていますが、、、) https://developer.mozilla.org/en/DOM/range このあたりを参考にしてみてください。 単純にrange.toString()でいいかもしれませんし、 range.cloneContents()でdocumentFragmentを生成してinnerHTMLなどを何かしないといけないかもしれません。 documentFragmentにはinnerHTMLがないので、<div>を生成してコピーしてみました。 javascript:(function(){sel=getSelection(); if(sel && sel.rangeCount>0){ range=sel.getRangeAt(0); d=document.createElement('div');d.appendChild(range.cloneContents()); alert(d.innerHTML);}})() 長いので改行しています。 cloneContents()の仕様上、ValidなHTML(XHTML)に書き換えられますので、 選択した範囲のHTMLとは異なりますが、ご参考まで。

tonton-v2
質問者

お礼

教えていただいたコードで思い通りの動作をさせることができました! しかし、自分の勉強不足も身に染みたのでこれを機にjavascriptの知識をもう少し付けようと思います^^; 御回答本当にありがとうございました!

その他の回答 (5)

回答No.6

連続失礼します。 > ANo.1お礼 > <a href="​http://www​~">リンク</a>が取得できるといったものです) もしhref属性だけを取りたいのであれば、 innerHTMLではなくcloneContentsでdocumentFragmentを生成した後、 DOMツリーからaエレメントを探し、getAttribute('href')などで取得した方がいいかもしれません。

noname#84373
noname#84373
回答No.4

>javascript:(function(){javascript:window.open('​http://localhost:3000/webscraps/new?title='+encodeURIComponent(docu...​})() これってもしかして<a href="javascript:~ で始めてますか? そしてfunction(){javascript:~て記述があります これも変!クラス定義みたいになってるし もしやるなら <a href="#" onClick="window.open(~ だけでよいのでは?

tonton-v2
質問者

お礼

javascriptの記述を全く理解できていないのにやろうとしていたもので^^; これから知識を付けていこうかと思います 御回答ありがとうございました!

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.3

document.getSelection()で、選択部分の「文字列」は取得できますが、対応する部分のHTMLソースを得る方法は無さそうです。 http://developer.mozilla.org/en/DOM_Client_Object_Cross-Reference/document

tonton-v2
質問者

お礼

自分も探した結果なさそうだったのですが、どうしても必要で質問させて頂きました。 御回答ありがとうございました!

noname#84373
noname#84373
回答No.2

あっファイル名はtest.htmlにして。 自分自身を呼び出しているので適当に変更してください?

noname#84373
noname#84373
回答No.1

<html> <body> <input type="text" id="a"> <div> マウスで範囲を選択します<br> いやいや色々な表現方法があるものです<br> どう利用するか、どう感じたかは人それぞれ<br> function(){ javascript: ~ ←これはまずい。 123 456 789<br> </div> <script> document.getElementById('a').value = decodeURIComponent(location.search) ; document.body.onmouseup = chk; function chk(){ var key = getSelectText(); if(key=='') return; window.open('test.html?title='+encodeURIComponent(key)); } function getSelectText(){ return (/*@cc_on!@*/false)?((document.selection.type == 'Text')? document.selection.createRange().text:''):window.getSelection().getRangeAt(0); } </script> </body>

tonton-v2
質問者

お礼

早速の御返事ありがとうございます。 ただ、自分の知識不足で使い方を過ってるだけかもしれませんが、少々望んでいるものと違いまして・・・ まず、FirefoxのURLを入力する欄で実行したいためhtmlではなくjavascript:~を用いて一行で実行したいこと。 テキストを取得するのではなく、HTMLソースを取得したいこと。(ページ上の"リンク"を選択した後にjavascriptを実行すると、<a href="http://www~">リンク</a>が取得できるといったものです) もし自分の勘違いであった場合は申し訳ありません。 本当にありがとうございました。

関連するQ&A