我创建了一个Chrome打包应用程序,它作为CRX从Chrome商店中下载。我想让用户使用mailto:链接从应用程序发送邮件。看来这是不允许的,因为安全限制(当我尝试开发时,这就是我得到的错误)。
我找到了另一个线程,他们说它通过设置location.href来起作用,但是这个问题很老了,我假设安全限制可能是新的。
那么......有没有办法从Chrome打包的应用程序打开用户的本地邮件客户端,这样他们就可以发送消息了?
答案 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);
});
});