Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 怪异的firefox-safari-chrome-ie8+;Jquery的扩展问题_Javascript_Jquery_Firefox Addon_Google Chrome Extension_Safari Extension - Fatal编程技术网

Javascript 怪异的firefox-safari-chrome-ie8+;Jquery的扩展问题

Javascript 怪异的firefox-safari-chrome-ie8+;Jquery的扩展问题,javascript,jquery,firefox-addon,google-chrome-extension,safari-extension,Javascript,Jquery,Firefox Addon,Google Chrome Extension,Safari Extension,我已经为firefox和谷歌chrome、safari和ie8+开发了一个扩展。它在谷歌邮件界面中插入一个按钮。该按钮用于在电子邮件页脚中插入一些自定义文本。如果我访问标准谷歌邮箱地址(您可以观看并查看),这四个地址都可以正常工作 相反,如果我通过谷歌应用程序访问gmail,几乎所有的一切都会泡汤。唯一有效的插件是谷歌chrome。在所有其他的例子中,按钮被正确地添加了,但是当我点击它时,它不会在电子邮件页脚中添加任何内容,并产生以下错误 在firefox中,我得到以下jquery错误控制台:

我已经为firefox谷歌chromesafariie8+开发了一个扩展。它在谷歌邮件界面中插入一个按钮。该按钮用于在电子邮件页脚中插入一些自定义文本。如果我访问标准谷歌邮箱地址(您可以观看并查看),这四个地址都可以正常工作

相反,如果我通过谷歌应用程序访问gmail,几乎所有的一切都会泡汤。唯一有效的插件是谷歌chrome。在所有其他的例子中,按钮被正确地添加了,但是当我点击它时,它不会在电子邮件页脚中添加任何内容,并产生以下错误

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

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

 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;
}
函数切换EncryptFooter(){
var canvasBody=getGmailCanvasBody();
//获取按钮元素
var documentul=getGmailCanvasDoc();
divul=jQuery(“.dX.J-Jw”,documentul);
var encryptButton=divul.find(#encrypt”);
//首先,检查我们是否已经有一个加密页脚
var encryptFooter=jQuery(“encryptFooter”,canvasBody);
如果(encryptFooter.length!=0){
//我们已插入页脚,请删除它
encryptFooter.remove();
//将按钮样式设置为无页脚
encryptButton.html(“启用加密”);
encryptButton.removeClass('downer');
encryptButton.addClass('upper');
}否则{
//添加页脚
var doc=单据;
var head=jQuery('head',doc);
var textul=head.find(“div#textul”,head);
//文本被插入injectScript/gmailadder.js中,插入画布框架的头部
getGmailCanvasBody().append(“”+textul.html()+“”);
//将按钮样式设置为添加的页脚
encryptButton.html(“禁用加密”);
encryptButton.removeClass('upper');
encryptButton.addClass('downer');
}
}
//获取文档的head元素
函数getGmailHead(){
var doc=单据;
var body=jQuery('head',doc);
返回体;
}
//获取文档的body元素
函数getGmailCanvasBody(){
var doc=单据;
Gmail=jQuery(“iframe”,doc);
if(gmailist.length==0){
//现在退出,我们不在撰写中
返回null;
}
返回gmailist.contents().find('body');
}
//获取文档对象
函数getGmailCanvasDoc(){
var doc=单据;
var body=jQuery('body',doc);
var canvas_frame=jQuery('iframe#canvas_frame',body);
if(canvas_frame.length==0){
//现在退出,我们不在gmail上
返回null;
}
var canvas\u doc=canvas\u frame[0]。contentDocument;
退货单;
}

我解决了这个问题。不知怎么的

从谷歌应用程序的“实验室”选项卡上禁用谷歌日历小工具似乎可以做到这一点。现在一切正常。希望这能帮助其他人

我不得不更换

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

在正常的Google mail界面中,我正在使用的iframe中似乎只有一个子iframe,因此只要这个条件保持不变,gmailist=jQuery(“iframe”,doc)就会完成它的工作

如果我激活几个用iframe实现的labs小工具,那么gmailist=jQuery(“iframe”,doc)将传递列表中的第一个子iframe,它可能不是我要查找的,因此我必须使用额外的筛选:在这种情况下,我要搜索的子iframe的类名


假设是伪装的魔鬼

我在这里猜测,但在我看来,这可能与XSS/同源策略有关。谷歌应用邮件URL可能与Gmail URL不同。不。如果我访问相同的链接[link]:标准界面可以工作,而通过谷歌应用程序访问的界面在firefox和safari上不起作用。但是,google chrome的扩展可以在所有的浏览器上运行,我希望我不会在这个令人沮丧的问题上浪费一周的时间!!!谢谢我从来不知道它的存在;我不是一个粗鲁的男孩!我接受了一些答案。
gmailInst = jQuery("iframe.Am.Al", doc);
if(gmailInst.length==0) {
    //exit now, we are not on compose
    return null;
}