从chrome打包的应用程序打开mailto:链接

时间:2013-11-22 18:55:57

标签: google-chrome google-chrome-extension google-chrome-app

我创建了一个Chrome打包应用程序,它作为CRX从Chrome商店中下载。我想让用户使用mailto:链接从应用程序发送邮件。看来这是不允许的,因为安全限制(当我尝试开发时,这就是我得到的错误)。

我找到了另一个线程,他们说它通过设置location.href来起作用,但是这个问题很老了,我假设安全限制可能是新的。

那么......有没有办法从Chrome打包的应用程序打开用户的本地邮件客户端,这样他们就可以发送消息了?

1 个答案:

答案 0 :(得分:1)

一些评论:

  • 此问题是关于在主窗口的mailto内提供iframe功能。
  • 添加链接(使用相应的href)可以正常工作,但需要用户互动(点击链接):<a href="mailto:...">...</a>
  • 内容安全策略阻止使用location.href = ...(可能会放松 - 我没有进一步了解它。)
  • 使用window.top.location.href = ...会导致以下错误: 无法打开同一窗口链接到&#34; mailto:...&#34 ;;尝试target =&#34; _blank&#34;。

解决方案:

它对我有用:

    window.open("mailto:...");

为了完整起见,下面是说明上述

的示例扩展的源代码

<强>的manifest.json:

{
    "manifest_version": 2,
    "name":    "Test App",
    "version": "0.0",

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

<强> background.js:

chrome.app.runtime.onLaunched.addListener(function() {
    chrome.app.window.create("wrapper.html");
});

<强> wrapper.html:

<!DOCTYPE html>
<html>
    <head></head>
    <body><iframe src="main.html"></iframe></body>
</html>

<强> main.html中:

<!DOCTYPE html>
<html>
    <head><script type="text/javascript" src="main.js"></script></head>
    <body>
        <form id="frm1">
            <input type="email" id="inp1" placeHolder="Recipient's e-mail"
                   required /><br />
            <input type="text" id="inp2" placeHolder="Message's subject"
                   required /><br />
            <input type="submit" id="btn1" value="Send e-mail" />
        </form>
    </body>
</html>

<强> main.js:

window.addEventListener("DOMContentLoaded", function() {
    var frm1 = document.getElementById("frm1");
    var inp1 = document.getElementById("inp1");
    var inp2 = document.getElementById("inp2");
    var btn1 = document.getElementById("btn1");

    frm1.addEventListener("submit", function(evt) {
        evt.preventDefault();
    });

    btn1.addEventListener("click", function() {
        var email = inp1.value;
        var subject = encodeURIComponent(inp2.value);
        var mailToStr = "mailto:" + email + "?Subject=" + subject);
        console.log(mailToStr);
        window.open(mailToStr);
    });

});