如何从Chrome扩展程序打开mailto:链接?

时间:2014-02-15 02:16:37

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

我有一个名为Shrtr的网址缩短Chrome扩展程序。现在,它允许用户将缩短的URL复制到剪贴板,但在下一个版本中,我添加了使用mailto:链接(即mailto:?subject=<original page title>&body=<short URL>)通过电子邮件发送缩短的URL的功能。 / p>

问题是,您不能只从扩展程序中分配document.location.href = 'mailto...';。以下两种方法对我有用,但两者都有,我最终在浏览器中打开了一个空白选项卡:

方法1:window.open

var wnd = window.open(emailUrl);
setTimeOut(function() {
    wnd.close();
}, 500);

请注意在关闭窗口之前需要等待。这有效(即邮件客户端新消息对话框出现,预先填充),但新选项卡仍保持打开状态。

方法2:使用chrome.tabs

chrome.tabs.create({ url: emailUrl }, function(tab) {
    setTimeOut(function() {
        chrome.tabs.remove(tab.id);
    }, 500);
});

再次,工作 - 但标签保持打开状态。有什么想法吗?

4 个答案:

答案 0 :(得分:6)

我意识到这是一个老问题,但我自己也有同样的问题,我想出了如何解决这个问题所以我想我会分享。

问题源于(我相信)您从扩展程序弹出页面调用以下代码。

chrome.tabs.create({ url: emailUrl }, function(tab) {
    setTimeout(function() {
        chrome.tabs.remove(tab.id);
    }, 500);
});

这个问题是,只要创建了一个新选项卡,弹出页面就会死掉,并且永远不会执行回调代码。

我们可以通过将代码移动到后台页面中的函数来解决这个问题,后台页面的生命周期与弹出页面无关:

function sendEmail() {
    var emailUrl = "mailto:blah@blah.com";
    chrome.tabs.create({ url: emailUrl }, function(tab) {
        setTimeout(function() {
            chrome.tabs.remove(tab.id);
        }, 500);
    });
}

并从弹出页面通过chrome.extension.getBackgroundPage().sendEmail()调用它。

使用上述方法,将打开默认电子邮件客户端,新选项卡将在500毫秒后自动关闭。

答案 1 :(得分:5)

var emailUrl = "mailto:blah@blah.com";

    chrome.tabs.update({
        url: emailUrl
    });

答案 2 :(得分:0)

你不需要像这样的密切陈述

<a href="javascript:window.open('','_self').close();">close</a>

学分归丹尼尔How to close current tab in a browser window?

甚至是这样的

//keep a handle to the window you open.

var newWin = window.open('my window', 'http://.../');

...
//some point later in the code
newWin.close();

积分转到Tracker1 Javascript Code to close tab that works in IE, Firefox and Chrome?

答案 3 :(得分:0)

我已经解决了这个问题。请检查它是否适合您的解决方案空间。

我使用以下代码在chrome扩展程序中打开mailto客户端。

$('.email').click(function(){
    var hrefString = $(this).attr('href');
    var myWindow = window.open(hrefString, "Opening mail client", "width=200, height=100");
        myWindow.document.write("<p>Opening mail client.Please wait!!</p>");
        setTimeout(function(){ myWindow.close() }, 2000);
    });

元素是:

 <a style="padding: 0 0 0 5px;" href="mailto:abc@xyz.com" class="email">

这对我有用。

希望它能帮助别人。

的问候,
Karan Ratra