![](/img/trans.png)
[英]Detecting web-based mail client vs local mail client for a mailto link
[英]Mailto link open in new tab only if web mail client
我有一個網頁,可創建聯系人及其電子郵件地址的列表。 mailto鏈接有兩個選項,(1)在當前窗口中打開它,或(2)在新的標簽/窗口中打開它。
我看到雙方都有潛在的弊端:
無論如何,是否可以“檢測”打開的網頁是否包含內容,如果沒有,則將其關閉?
基於此鏈接:
檢測基於Web的郵件客戶端與本地郵件客戶端之間的mailto鏈接
我嘗試了以下方法來獲得body
:
const windowRef = window.open(`mailto:${email}`, '_blank')
const body = windowRef.document.body
我遇到的問題是每個文檔的body
都是空的: <body></body>
我以為這是因為它沒有足夠的時間加載頁面,所以我嘗試設置setTimeout
但是隨后我Blocked a frame with origin "myhostman" from accessing a cross-origin frame.
卻得到了一個Blocked a frame with origin "myhostman" from accessing a cross-origin frame.
有什么方法可以同時支持Web和桌面郵件客戶端而又沒有上面列出的缺點嗎?
這很笨拙,但是可能會滿足您的要求:
您可以具有如下定義的SendEmail()
函數:
function SendEmail() { const windowRef = window.open(`mailto:email@address.com`, '_blank'); windowRef.focus(); windowRef.onfocus = function() { return; } setTimeout(function(){ windowRef.close(); },500); }
和您的html
看起來像這樣:
<a href="javascript:void(0)" onclick="SendEmail();">email</a>
其背后的想法是,如果您的用戶將Webmail作為其默認電子郵件客戶端,則該function
將退出; 但是,如果用戶具有桌面電子郵件客戶端,則新窗口將失去焦點,觸發setTimeout()
關閉新打開的窗口。
我的測試使用此JSFiddle可以很好地進行, 但是經過了“半”測試,我的意思是,由於我沒有將Webmail客戶端設置為默認客戶端,因此我無法確認此功能是否可以按照您的意願進行,但是我可以確認當我的桌面電子郵件客戶端打開時,窗口關閉...
更新:
忘記上面的功能,我對此做了一些修改:
function SendEmail() {
const windowRef = window.open(`mailto:email@address.com`, '_blank');
windowRef.focus();
setTimeout(function(){
if(!windowRef.document.hasFocus()) {
windowRef.close();
}
}, 500);
}
我通過設置Gmail和Yahoo!在Firefox中對此進行了測試。 作為我的默認電子郵件客戶端,新的打開的選項卡保持打開狀態; 然后將其更改回桌面電子郵件客戶端,並關閉新打開的標簽頁。 我使用Vivaldi和IE Edge(將我的桌面客戶端設置為默認客戶端)進行了相同的測試,結果成功相同。 這是更新的JSFiddle 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.