Chrome扩展程序中的JavaScript返回“无法读取未定义的属性'XXX'

时间:2013-12-31 17:40:56

标签: javascript google-chrome google-chrome-extension

我一直在开发一个简单的Chrome扩展程序,我正确显示上下文菜单,但我无法打开弹出窗口。我试图让它根据选择来区分行动。

更新

在搞乱了几个小时后,我想我离我更近了,但是现在我得到了一个“无法读取属性”的未定义的“linkUrl”,我无法弄清楚它来自哪里。

function getEmail(info,tab) {
    chrome.windows.create({
        url: "https://mail.google.com/mail/?ui=2&view=cm&fs=1&tf=1&shva=1&to="+info.linkUrl.substr(7), 
        width:640,
        height:700,
        focused:true,
        type:"popup",
    })
}

function sendEmail(info,tab) {
    chrome.windows.create({
        url: "https://mail.google.com/mail/?ui=2&view=cm&fs=1&tf=1&shva=1&to=" +info.selectionText,
        width:640,
        height:700,
        focused:true,
        type:"popup",
    })
}

chrome.contextMenus.create({
    title: "Send a New Email",
    contexts:["link", "selection"],
    onclick: checkType(),
});

function checkType(info,tab) {
    if (typeof info.linkUrl === $('a[href^="mailto:"]')) {
        console.log("This should print first");
        // getEmail();
    }
    else { 
        console.log("This should print");
        // sendEmail();
    }
}

的manifest.json

{
   "background": {
      "scripts": [ "background.js" ]
   },

   "description": "Creates a context menu option which copies the selected address into a new Gmail compose window.",

   "manifest_version": 2,
   "name": "New Gmail Window",
   "permissions": [ "tabs", "contextMenus" ],
   "version": "0.1"
}

2 个答案:

答案 0 :(得分:1)

我认为您的checkType功能应该修复:

function checkType(info,tab) {
    if (info.linkUrl === $('a[href^="mailto:"]')) {
        getEmail(info, tab)
    }
    else { 
        sendEmail(info, tab);
    }
};

答案 1 :(得分:0)

此行:onclick: checkType(),尝试将checkType()返回值设置为onclick事件的处理程序。立即调用checkType()而不传递任何参数会导致“无法读取属性'linkUrl'未定义”错误。

注册处理程序的正确方法是:

...
onclick: checkType,
...