对于一个项目,我需要获取当前打开的消息的正文并将该消息传递给 Web 服务以处理和存储它的一些数据。
我认为最好的方法是使用扩展来获取消息正文(以及一些附加信息),然后将其作为 Web 请求发送到服务以插入数据库。
但我不知道我应该如何处理这个问题。我按照一些教程让我开始使用 chrome 插件,但我找不到如何获取消息的正文。
我发现你需要它的内容脚本,但即便如此我也不知道。
谁能给我一个先机?
对于一个项目,我需要获取当前打开的消息的正文并将该消息传递给 Web 服务以处理和存储它的一些数据。
我认为最好的方法是使用扩展来获取消息正文(以及一些附加信息),然后将其作为 Web 请求发送到服务以插入数据库。
但我不知道我应该如何处理这个问题。我按照一些教程让我开始使用 chrome 插件,但我找不到如何获取消息的正文。
我发现你需要它的内容脚本,但即便如此我也不知道。
谁能给我一个先机?
每封电子邮件都有自己的唯一消息 ID。
用于content.js
从元素中获取“messageId”,然后将其传递给以Gmail API
获取电子邮件数据。
样本:
<div class="adn ads" style="display:" data-message-id="189******56e***3" data-legacy-message-id="189******56e***3">
API 以各种格式返回电子邮件的数据。其中之一是“原始”格式,它将完整的电子邮件正文作为 base64url 编码的字符串返回。将此数据按原样发送到您的服务器,然后解密电子邮件并将其保存到您的数据库中。
这是我想出的代码,请务必在附加部分中添加按钮,并为它们提供一个带有计数的 id。这会等待 div 在单击或加载时到达,它会在加载后将附加的材料插入指定区域。无需担心随机类,因为它们是静态的。该代码已经运行了两年。
window.addEventListener("DOMNodeInserted", function(event) {
//TEST TO SEE WHERE CSS IS AT
// $(event.target).append($(event.target).parent()[0].className);
if($(event.target).parent()[0].className == 'oc gU')
{
//ADD SEND BUTTON FOR MESSAGES
//SUBJECT OF ENTIRE EMAIL GLOBAL
var subject = $(event.target).parents().eq(28).children(1).find(".hP").text();
//GET DATA EMAIL AND NAME
//Can assign via id or data-name and jid for email
var imageid = $(event.target).parents().eq(18).find("img[jid]").attr("id");
//THIS IS THE SEND BUTTON IN REPLAY ADD A BUTTON NEXT TO IT WITH THIS
$(event.target).parents().eq(1).find(".gU.Up").children(0).append("addbuttonid here");
//set click event for button
$('#'+addbuttonid).click(function(){
//TO DO HERE
//BODY FROM the REPLY MESSAGE
var body = $(event.target).parents().eq(11).find('.Am').text();
//PREVIOUS THREAD MESSAGES OPTIONAL
var body = body + $(event.target).parents().eq(11).find('.gmail_extra').text();
});
}
else if($(event.target).parent()[0].className == "aCi")
{
//THREAD MESSAGE
//GET EMAIL SUBJECT
var subject = $(event.target).parents().eq(17).children(1).find(".hP").text();
//GET TO INFO
var to = $(event.target).parents().eq(7).find('.g2');
//GET NAME AND EMAIL
var imageid = $(event.target).parents().eq(7).find("img[jid]").attr("id");
var value = $("#\\"+imageid).attr("jid");
var vname = $("#\\"+imageid).attr("data-name");
//GET DOCUMENT BODY
var tmp = $(event.target).parents().eq(6).find(".gs");
var body = tmp.text();
//GET DOCUMENT DATE
var date = $(event.target).parents().eq(7).find('.g3').attr('title');
date = date.replace(" at ", " ");
//ADD THE BUTTONS HERE WITH INITIAL VALUES
$(event.target).parents().eq(6).append('addbutton2');
$("#"+addbutton2).click(function(event){
var email = $("#\\"+$(this).attr("data-imageid")).attr("jid");
var name = $("#\\"+$(this).attr("data-imageid")).attr("data-name");
var body = $(this).attr("data-body");
//TOD FOR BUTTON NEXT TO REPLY ICON ON THREAD AS OPENED
});
}
});
正如您使用此代码所看到的,您现在可以在回复部分或线程中的任何消息中添加按钮 i gmail UI,以及您的欢迎 :)。这是唯一的代码,除非您自己通过 Chrome 扩展程序工作。Gmail.js 或使用 API 根本不是必需的,因为您可以从页面中提取数据
这就是你的过程应该是:
打开邮件后,您应该会在电子邮件正文或 gmail 中的某处看到一个按钮。
单击该按钮应复制电子邮件的正文并将其推送到 Web 服务器。
如果要自动复制粘贴消息,可以默认单击此按钮。
对于这个过程——
创建一个content_script.js
文件并将按钮放置在 gmail DOM 中。
单击按钮后,发送一条消息至eventpage.js
,该消息将包含当前打开的电子邮件的正文。请注意,我没有使用过background.js
,而是eventpage.js
因为谷歌要求您避免使用background.js
,并且两者都相同,持久性差异不大。
您的网络服务器可以接收并存储消息。
如果您想避免按钮过程,那么content_script.j
s 应该自动查找电子邮件打开事件并重复上述过程。但我建议您保留该按钮,因为有时您可能会单击不想复制的消息。
这是一个老问题,但经过几天的尝试,我找到了答案。要获取电子邮件标题,请遍历包含电子邮件标题的 HTMLCollection,该电子邮件标题可以通过类名 hP 找到:
var list= document.getElementsByClassName("hP");
for (var i = 0; i < list.length; i++) {
console.log(list[i].innerText);
}
要获取电子邮件正文,请遍历包含电子邮件正文(类 ii)的 HTMLCollection:
var list= document.getElementsByClassName("ii");
for (var i = 0; i < list.length; i++) {
console.log(list[i].innerText);
}
如果我必须这样做,我会尝试在 GMAIL 客户端上找出包含正文的 DIV 的 ID...使用 jQuery 获取 DIV 的 HTML 或文本内容非常简单...看看:http ://api.jquery.com/html/
一个简单的 jQuery 选择器看起来像这样:
$("#gmailsBodyDivID").html()
如果 jQuery 不是一个选项,您可以使用 JavaScript getElementByID
(http://www.w3schools.com/jsref/met_doc_getelementbyid.asp)获取 DIV
最后,正如 DudeOnRock 所提到的,您应该对 Web 服务使用 Ajax 请求。
困难的部分是要知道 Gmail 如何命名您要查找的 DIV...我只是快速浏览了一下,在我的上,有一些奇怪的命名...
<div id=":w1" class="ii gt adP adO"><div id=":w2">
我不确定 ":w1" 或 ":w2" 代表什么,也不知道如何将它们与 jQuery 选择器一起使用......也许更有知识的人可能会在那里有所启发。
......所以我想你应该首先关注那个......
如果 ID 证明很难,您可能希望通过类名使用 jQuery 选择器...
祝你好运!
我不确定您的项目的确切要求是什么,但是是否可以只设置一个电子邮件地址来将这些电子邮件转发到?
从那里,您只需要以您的首选语言设置服务器来检查新电子邮件并处理它们(过滤内容,插入数据库等)。
好处:
这很难。正如@frenetix 指出的那样,您可以获取所需元素的 ID 并遵循他(或她)的方法。困难的是,Google 实际上几乎每次加载 Gmail 时都会更改元素 ID,这几乎是不可能的。
您可以做的一件事是假设您(或用户)正在单击撰写窗口。然后您可以执行“document.activeElement”来获取正确的 DOM 元素。这至少会让你更进一步能够做你想做的事,尽管它还没有完全实现。
祝你好运。我现在在这个领域工作,这很艰难。
Chrome 扩展程序本质上是用 JavaScript 编写的。如果至少对 JavaScript 有一些了解,你打算做的事情将非常困难。以下是一些提示: 要访问网站元素,我建议您学习使用 JavaScript 进行 DOM 操作。要将数据发送到网站,您将不得不使用 HTTPRequests (AJAX)。