我創建了一個Chrome打包的應用,作爲CRX從Chrome商店下載。我想讓用戶使用mailto:鏈接從應用程序發送郵件。看起來,這是不允許的,因爲安全限制(當我嘗試開發時,這是我得到的錯誤)。從Chrome打包的應用打開mailto:鏈接
我發現了另一個線程,他們說,它的工作通過設置location.href,但這個問題是很老了,我假設安全限制可能是新的。
所以...有沒有辦法從Chrome封裝應用中打開用戶本地的郵件客戶端,這樣他們就可以發送郵件?
我創建了一個Chrome打包的應用,作爲CRX從Chrome商店下載。我想讓用戶使用mailto:鏈接從應用程序發送郵件。看起來,這是不允許的,因爲安全限制(當我嘗試開發時,這是我得到的錯誤)。從Chrome打包的應用打開mailto:鏈接
我發現了另一個線程,他們說,它的工作通過設置location.href,但這個問題是很老了,我假設安全限制可能是新的。
所以...有沒有辦法從Chrome封裝應用中打開用戶本地的郵件客戶端,這樣他們就可以發送郵件?
一個幾句話:
iframe
內提供mailto
功能。href
)工作正常,但需要用戶交互(點擊鏈接):<a href="mailto:...">...</a>
location.href = ...
從內容安全策略(可有可能放寬阻止 - 我沒有進一步瞭解它)。window.top.location.href = ...
導致以下錯誤: 無法打開同一窗口鏈接「的mailto:...」;嘗試目標=「_空白」。解決方案是:
它使用爲我工作:
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);
});
});
使用window.open工作就像一個冠軍!請注意,就我而言,窗口需要在異步xmlhttp請求返回後打開,因此它不是用戶操作的直接結果,並且仍然有效。 –
既然你很容易地把這個問題弄明白了,我可以請你看看這個沒有得到任何愛的人: http://stackoverflow.com/questions/19035195/how-to-launch-a- PDF-從-A - 鉻 - 包裝 - 應用 –
請問您是否可以發佈一些代碼(因爲它似乎對我來說工作得很好 - 至少在開發中)。 – gkalpak
沒有太多。我的清單沒有沙盒的東西,因爲我需要訪問「存儲」API。我的主頁只是一個將我的內容頁面加載到IFRAME中的包裝器。我的內容頁面顯示'location.href =「mailto:blah ...」'。它對你有用的事實很有趣。我想知道我是否需要設置window.top.location.href或者什麼來突破IFRAME ... –
爲什麼使用'location.href = ...'?我使用了'...',它工作。我誤解了你之後的情況嗎? – gkalpak