Cliquez par programme sur le bouton "Afficher l'original" de Gmail dans une extension chrome?

Je ne peux pas trouver un moyen de cliquer sur le bouton original d'émission de gmail par programme dans une extension chrome, il ne semble pas y avoir de lien dans la source.

Cependant, l'url est similaire au courrier électronique formaté et peut-être pourrait être construit, sauf qu'il possède un type d'identifiant utilisateur que je n'ai aucun moyen d'obtenir:

Vue courrier électronique:

https://mail.google.com/mail/?shva=1#inbox/131bfc47a65cb2fe 

Afficher l'original:

 https://mail.google.com/mail/?ui=2&ik=8b4b18b93a&view=om&th=131bfc47a65cb2fe 

Notez l'identifiant utilisateur &ik=8b4b18b93a

Est-il possible d'obtenir un lien pour montrer l'original?

Merci

Lorsque je clique sur "Afficher la source de la page" sur n'importe quelle page de Gmail, je vois cette clé dans var GLOBALS=[...] array. Je lisais la source de la page gmail à partir d'une page d'arrière-plan à l'aide de XMLHttpRequest , puis analysez-la avec des expressions régulières pour trouver cette clé.

Une autre façon serait d'injecter la <script> sur la page Gmail à l'aide d'un script de contenu, puis de passer ce réseau GLOBALS à un script de contenu à l'aide d' événements personnalisés (tout ceci pour sortir du script de contenu sandbox).

 //Inject the following Script from contentScript to Page Script //Allow firing an event [http://stackoverflow.com/questions/2381572/how-can-i-trigger-a-javascript-event-click] function fireEvent(node, eventName) { // Make sure we use the ownerDocument from the provided node to avoid cross-window //problems var doc; if (node.ownerDocument) { doc = node.ownerDocument; } else if (node.nodeType == 9) { // the node may be the document itself, nodeType 9 = DOCUMENT_NODE doc = node; } else { throw new Error("Invalid node passed to JSUtil.fireEvent: " + node.id); } if (node.fireEvent) { // IE-style var event = doc.createEventObject(); event.synthetic = true; // allow detection of synthetic events node.fireEvent("on" + eventName, event); } else if (node.dispatchEvent) { // Gecko-style approach is much more difficult. var eventClass = ""; // Different events have different event classes. // If this switch statement can't map an eventName to an eventClass, // the event firing is going to fail. switch (eventName) { case "click": // Dispatching of 'click' appears to not work correctly in Safari. Use 'mousedown' or 'mouseup' instead. case "mousedown": case "mouseup": eventClass = "MouseEvents"; break; case "focus": case "change": case "blur": case "select": eventClass = "HTMLEvents"; break; default: throw "JSUtil.fireEvent: Couldn't find an event class for event '" + eventName + "'."; break; } var event = doc.createEvent(eventClass); var bubbles = eventName == "change" ? false : true; event.initEvent(eventName, bubbles, true); // All events created as bubbling and cancelable. event.synthetic = true; // allow detection of synthetic events node.dispatchEvent(event); } } //Then select the element var xx = document.query(showOriginalSelector); //Fire mouseUp and mouseDown Events simultaneously fireEvent(xx, 'mousedown'); fireEvent(xx, 'mouseup');