Gmail 上的 JS 文本选择
我正在构建一个书签,它获取所选文本并将其发送回我的服务器进行处理。它适用于除 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();
};
I'm building a bookmarklet that takes the selected text and sends it back to my server where it is processed. It works on every site except Gmail. Anyone know how to get it to work on Gmail. Here is the code I'm using:
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();
};
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我遇到了同样的问题,并发现你的问题正在寻找答案。
据我所知,代码中的问题不是 window.getSelection 在 gmail 中未定义,而只是 getSelection().toString() 返回零长度字符串,尽管选择了文本。在 Firefox 中,蒂姆·唐的解决方案对我有用,但在 Chrome 中不起作用,因为 contentWindow 不可用。
我修改后的代码在 Firefox、Chrome 和 Safari 中都可以在 Gmail 中工作,该代码会迭代页面上的任何框架。 (我没有在其他浏览器中测试过)。
I had hit the same problem and found your question looking for an answer myself.
The issue in your code, as far as I can tell, is not that window.getSelection is undefined in gmail, but simply that getSelection().toString() returns a zero length string despite text being selected. In Firefox Tim Down's solution worked for me but not in Chrome as contentWindow in not available.
My revised code below which iterates though any frames on the page is working in Gmail for me in Firefox, Chrome and Safari. (I've not tested it in other browsers).
最后一个案例在 Firefox 中的 Gmail 中对我来说效果很好。不过,该代码存在一些缺陷:
window.getSelection()
返回一个Selection
对象,而不是字符串(我到处都看到这种情况。我认为这是 PPK 的错误)。你需要selectedText = "" + window.getSelection();
document.activeElement
可以指向 iframe。修改后的代码:
The last case works fine for me in Gmail in Firefox. There are some flaws with that code though:
window.getSelection()
returns aSelection
object, not a string (I see this everywhere. I think it's PPK's fault). You needselectedText = "" + window.getSelection();
document.activeElement
in IE can point to an iframe.Revised code:
这对我在 gmail 中使用 firefox 3.6 有用,
Firefox 的 chrome 浏览器中 browser.js 文件中的函数 getBrowserSelection() 被 Firefox 用于上下文菜单搜索。
This worked for me using firefox 3.6 in gmail,
A function getBrowserSelection() in the browser.js file in Firefox’s chrome is used by Firefox for the contextual menu search ..