几点说明:
- 这个问题是关于在主窗口的
iframe 中提供mailto 功能。
- 添加链接(使用适当的
href)可以正常工作,但需要用户交互(单击链接):<a href="mailto:...">...</a>
- 内容安全策略禁止使用
location.href = ...(可能会放宽 - 我没有进一步研究)。
- 使用
window.top.location.href = ... 会导致以下错误:
无法打开“mailto:...”的同窗口链接;尝试目标 =“_blank”。
解决办法:
它对我有用:
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);
});
});