JavaScript で iframe から選択したテキストを取得するにはどうすればいいですか? 質問する

JavaScript で iframe から選択したテキストを取得するにはどうすればいいですか? 質問する
<html>
 <body>
  <script type="text/javascript">

   function smth() {

    if (document.getSelection) {
    var str = document.getSelection();
    if (window.RegExp) {
      var regstr = unescape("%20%20%20%20%20");
      var regexp = new RegExp(regstr, "g");
      str = str.replace(regexp, "");
    }
    } else if (document.selection && document.selection.createRange) {
     var range = document.selection.createRange();
     var str = range.text;
    }   

    alert(str);
   }
  </script>   

    <iframe id="my"  width="300" height="225">
   .....some html ....
    </iframe>      

    <a href="#" onclick="smth();">AA</a>
 </body>    
</html>

関数を使用するとsmth、一部の div から選択したテキストを取得できますが、iframe では機能しません。iframe から選択したテキストを取得する方法について何かアイデアはありますか?

ベストアンサー1

ドキュメントの取得選択

外側のドキュメントにあります。iframe 内のドキュメントの選択を取得するには、内側のドキュメントを取得する必要があります。

var iframe= document.getElementById('my');
var idoc= iframe.contentDocument || iframe.contentWindow.document; // ie compatibility

idoc.getSelection()

ただし、WebKitはサポートしていません。document.getSelection() または document.selectionこれを に置き換えてみてください。これはwindow.getSelection()Firefox と WebKit の両方で動作しますが、選択オブジェクト (Ranges のコレクション/ラッパー) を返すため、文字列化が必要です。

var idoc= iframe.contentDocument || iframe.contentWindow.document;
var iwin= iframe.contentWindow || iframe.contentDocument.defaultView;

''+iwin.getSelection()

これが何を意味するのかよく分かりません。

if (window.RegExp) {
  var regstr = unescape("%20%20%20%20%20");
  var regexp = new RegExp(regstr, "g");
  str = str.replace(regexp, "");
}

RegExpは、最も初期のバージョンにまで遡る基本的な JavaScript です。常に存在するので、探す必要はありません。複数のスペースの URL エンコードはまったく不要です。RegExp 自体も必要ありません。文字列の置換は次のように記述できます。

str= str.split('     ').join('');

おすすめ記事