如何让选择从使用javascript iframe的文本?(how to get selected

2019-07-19 08:34发布

<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中的文字?

Answer 1:

document.getSelection

是在外部文档。 为了得到你需要获取内部文件的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的作品,但返回一个选择对象(集合/包装周围范围),这就需要穿线:

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编码的多个空格的是完全没有必要。 你甚至都不需要正则表达式正因为如此,一个字符串替换可以写成:

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


Answer 2:

不能将内部访问数据iframe是从比你不同的域。 这是由于同源策略 。



Answer 3:

你需要从在iframe文档/窗口的选择。

function getIframeSelectionText(iframe) {
  var win = iframe.contentWindow;
  var doc = win.document;

  if (win.getSelection) {
    return win.getSelection().toString();
  } else if (doc.selection && doc.selection.createRange) {
    return doc.selection.createRange().text;
  }
}

var iframe = document.getElementById("my");
alert(getIframeSelectionText(iframe));


Answer 4:

下面的代码将返回选定的文本。

function getSelectedText(frameId) { 
    // In ExtJS use: 
    // var frame = Ext.getDom(frameId); 
    var frame = document.getElementById(frameId); 

    var frameWindow = frame && frame.contentWindow; 
    var frameDocument = frameWindow && frameWindow.document; 

    if (frameDocument) { 
        if (frameDocument.getSelection) { 
            // Most browsers 
            return String(frameDocument.getSelection()); 
        } 
        else if (frameDocument.selection) { 
            // Internet Explorer 8 and below 
            return frameDocument.selection.createRange().text; 
        } 
        else if (frameWindow.getSelection) { 
            // Safari 3 
            return String(frameWindow.getSelection()); 
        } 
    } 

    /* Fall-through. This could happen if this function is called 
       on a frame that doesn't exist or that isn't ready yet. */ 
    return ''; 
}

希望这将帮助别人。



Answer 5:

这个代码在所有现代浏览器:

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


文章来源: how to get selected text from iframe with javascript?