我正在构建一个书签,将所选的文本发送回我的服务器进行处理。它适用于Gmail以外的所有网站。任何人都知道如何在Gmail上使用它。这是我正在使用的代码:

var selectedText = '';
if (window.getSelection) {
  selectedText = window.getSelection();
} else if (document.getSelection) {
  selectedText = document.getSelection();
} else if (document.selection) {
  selectedText = document.selection.createRange().text;
} else {
  selectedText = document.activeElement.contentWindow.getSelection();
};

最佳答案

我遇到了同样的问题,发现您自己的问题正在寻找答案。

据我所知,代码中的问题不是在gmail中未定义window.getSelection,而是尽管选择了文本,但getSelection()。toString()仍返回零长度的字符串。在Firefox中,Tim Down的解决方案适用于我,但在Chrome中却无法使用,因为contentWindow不可用。

我修改后的代码(下面的代码可以迭代页面上的任何框架)对我在Firefox,Chrome和Safari中的Gmail都适用。 (我尚未在其他浏览器中对其进行测试)。

var selectedText = '';
if (window.getSelection) {
  selectedText = window.getSelection().toString();
}
if (selectedText == '') {
  var frames = window.frames;
  for (var i = 0; i < frames.length; i++) {
    if (selectedText == '') {
      selectedText = frames[i].document.getSelection().toString();
    }
    else { break; }
  }
}

10-07 14:30