2011-01-27 34 views
1

我正在構建一個書籤,它將所選文本並將其發送回我的服務器進行處理。它適用於除Gmail以外的每個網站。任何人都知道如何讓它在Gmail上運行。以下是我正在使用的代碼:Gmail上的JS文本選擇

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(); 
}; 
+1

我覺得很蹩腳的是,沒有人評論爲什麼會下結論。康納的問題很好,祝你好運。 Goshido聽起來像一個驚人的冒險。 – sholsinger 2011-05-18 21:11:51

+0

[這是一個更一般的解決方案](http://stackoverflow.com/questions/808744/how-to-find-selection-in-html-document-that-c​​ontains-iframe-or-just-frames)那也適用於框架內的選定文本。 – Sport 2012-10-01 03:09:15

回答

2

我擊中了同樣的問題,發現你的問題尋找答案自己。

就我所知,代碼中的問題並不是window.getSelection在gmail中是未定義的,只是getSelection()。toString()儘管選擇了文本而返回了零長度的字符串。在Firefox中,Tim Down的解決方案適用於我,但不適用於Chrome,因爲contentWindow不可用。

我的修改後的代碼在下面迭代,雖然頁面上的任何框架都在Gmail中爲我在Firefox,Chrome和Safari中工作。 (我沒有在其他瀏覽器中測試過)。

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; } 
    } 
} 
0

最後一種情況在Firefox中的Firefox中正常工作。有一些缺陷與該代碼,但:

  • window.getSelection()返回Selection對象,而不是一個字符串(我看到這個到處都是,我認爲這是PPK的錯)。您需要selectedText = "" + window.getSelection();
  • 最終案例涵蓋非IE瀏覽器中的iframe,但不包含IE;我認爲(但我不確定)IE中的document.activeElement可以指向iframe。

修改後的代碼:

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 if (document.activeElement.contentWindow) { 
    var win = document.activeElement.contentWindow; 
    if (win.getSelection) { 
    selectedText = win.getSelection(); 
    } else if (win.document.selection) { 
    selectedText = win.document.selection.createRange().text; 
    } 
}; 
+0

感謝Tim的幫助,但這在Gmail中對我無效。 – conorwade 2011-01-31 12:39:00

0

這個工作我在Gmail中使用的Firefox 3.6,
函數getBrowserSelection()在Firefox的鍍鉻browser.js文件的上下文菜單搜索中使用的Firefox ..

var focusedWindow = document.commandDispatcher.focusedWindow; 
var selection = focusedWindow.getSelection();