簡體   English   中英

僅當Web郵件客戶端時,Mailto鏈接才會在新選項卡中打開

[英]Mailto link open in new tab only if web mail client

我有一個網頁,可創建聯系人及其電子郵件地址的列表。 mailto鏈接有兩個選項,(1)在當前窗口中打開它,或(2)在新的標簽/窗口中打開它。

我看到雙方都有潛在的弊端:

  • 對於Web郵件客戶端(例如gmail),選項1並不理想,因為它會劫持窗口,並且用戶必須以某種方式導航回應用程序
  • 對於桌面郵件客戶端,第一個選項並不理想,因為現在您有一個空白窗口/選項卡處於打開狀態

無論如何,是否可以“檢測”打開的網頁是否包含內容,如果沒有,則將其關閉?

基於此鏈接:

檢測基於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM