我正在构建一个获取所选文本的书签,并将其发送回处理它的服务器。它适用于除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();
};
答案 0 :(得分:2)
我遇到了同样的问题,发现自己的问题正在寻找答案。
据我所知,你的代码中的问题不是window.getSelection在gmail中是未定义的,但只是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; }
}
}
答案 1 :(得分:0)
最后一个案例适用于Firefox中的Gmail。但是代码存在一些缺陷:
window.getSelection()
返回一个Selection
对象,而不是一个字符串(我到处都看到了。我认为这是PPK的错)。您需要selectedText = "" + window.getSelection();
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;
}
};
答案 2 :(得分:0)
这对我在gmail中使用firefox 3.6很有用 Firefox的chrome中的browser.js文件中的函数getBrowserSelection()被Firefox用于上下文菜单搜索..
var focusedWindow = document.commandDispatcher.focusedWindow;
var selection = focusedWindow.getSelection();