0

我为firefoxgoogle chromesafariie8+开发了一个扩展。它在 google 邮件界面中插入一个按钮。该按钮应该在电子邮件页脚中插入一些自定义文本。如果我访问标准的谷歌邮件地址(你可以在这里这里观看) ,它在所有四个上都可以正常工作。

相反,如果我通过谷歌应用程序访问 gmail ,它几乎都会失败。唯一运行良好的插件帽子是谷歌浏览器。在所有其他人中,该按钮已正确添加,但是当我单击它时,这不会在电子邮件页脚中添加任何内容并产生以下错误。

在 Firefox 中,我得到以下 jquery 错误控制台:

 Error: Permission denied to access property 'ownerDocument' Source File: chrome://sendsecurefree/content/jquery.js Line: 16

在萤火虫中:

 uncaught exception: [Exception... "Security Manager vetoed action"  nsresult: "0x80570027 (NS_ERROR_XPC_SECURITY_MANAGER_VETO)"  location: "JS frame :: chrome://sendsecurefree/content/jquery.js :: anonymous :: line 16"  data: no] Line 0

此外,在 Safari 中:

 ReferenceError: Can't find variable: toggleEncryptFooter

在 Internet Explorer 中仅撰写邮件作品,转发和回复没有。

这是我注入 gmail 网页的 jquery 代码:

function toggleEncryptFooter() {

var canvasBody = getGmailCanvasBody();

// get the button element
var documentul = getGmailCanvasDoc();
divul = jQuery(".dX.J-Jw", documentul);      
var encryptButton = divul.find("#encrypt");

//first, check if we already have an encrypt footer
var encryptFooter = jQuery("#encrypt_footer", canvasBody);
if(encryptFooter.length != 0) {
    //we have the footer inserted, delete it
    encryptFooter.remove();

    // style the button to no footer
    encryptButton.html('Enable Encryption');
    encryptButton.removeClass('downer');
    encryptButton.addClass('upper');
} else {
    //add the footer
    var doc = document;
    var head   = jQuery('head', doc);
    var textul = head.find("div#textul",head);

    // text was inserted in injectScript / gmailadder.js into head of canvas_frame
    getGmailCanvasBody().append('<div id="encrypt_footer">' + textul.html() + '</div>');     

    // style the button to footer added
    encryptButton.html('Disable Encryption');
    encryptButton.removeClass('upper');                      
    encryptButton.addClass('downer');
}
}

// gets the head element of the document
function getGmailHead(){
    var doc = document;
    var body = jQuery('head', doc);  
return body;
}

 // gets the body element of the document   
 function getGmailCanvasBody() {
var doc = document;

gmailInst = jQuery("iframe", doc);
    if(gmailInst.length==0) {
        //exit now, we are not on compose
        return null;
}
return gmailInst.contents().find('body');
 }

 // get the document object    
 function getGmailCanvasDoc() {
var doc = document;
var body = jQuery('body', doc);
var canvas_frame = jQuery('iframe#canvas_frame', body);
     if(canvas_frame.length==0) {
         //exit now, we are not on gmail
         return null;
          }

var canvas_doc = canvas_frame[0].contentDocument;

return canvas_doc;
}
4

2 回答 2

1

我解决了这个问题。不知何故!

似乎从 Google Apps 的实验室选项卡中禁用Google 日历小工具似乎可以完成这项工作。现在一切正常。希望这对其他人有帮助。

于 2011-03-01T08:35:01.550 回答
1

我不得不更换

gmailInst = jQuery("iframe", doc);
if(gmailInst.length==0) {
    //exit now, we are not on compose
    return null;
}

gmailInst = jQuery("iframe.Am.Al", doc);
if(gmailInst.length==0) {
    //exit now, we are not on compose
    return null;
}

似乎在正常的 Google 邮件界面中,我正在使用的 iframe 内只有一个子 iframe,所以只要这种情况保持不变, gmailInst = jQuery("iframe", doc)就可以完成它的工作。

如果我激活了一些使用 iframe 实现的实验室小工具,那么gmailInst = jQuery("iframe", doc)会传递列表中的第一个子 iframe,这可能不是我正在寻找的那个,所以我必须使用额外的过滤:在这种情况下,我正在搜索的子 iframe 的类名。

假设是伪装的魔鬼。

于 2011-03-04T14:28:57.250 回答