2011-03-10 24 views
13

我有一個鏈接按鈕,用於從頁面內容構建郵件。如何在不打開空白窗口或打擾窗口的情況下從JavaScript啓動它的最佳方式是什麼?MailTo來自Javascript

function Email() 
{ 
    var sMailTo = "mailto:"; 
    var sBody = ""; 

    var alSelectedCheckboxes = new Array(); 
    $("input:checkbox[CheckBoxType=Email]:checked").each(function() 
    { 
     alSelectedCheckboxes.push($(this).val()); 
    }); 

    if (alSelectedCheckboxes.length > 0) 
    { 
     for (var i=0; i<alSelectedCheckboxes.length; i++) 
     { 
      sBody += alSelectedCheckboxes[i]; 
      sBody += "\n"; 
     } 

     sMailTo += escape("<Insert Recipients Here>") +"?subject=" +escape("<Insert Subject Here>") +"&body=" +escape(sBody); 
     window.location.href = sMailTo; 
    } 
    else 
    { 
     alert("Please select some results"); 
    } 
} 

簡單的功能就在上面。 window.location.href不能正常工作,除非它是Firefox/Chrome(它在IE8中重新繪製頁面)。我也嘗試過window.open(sMailTo,「_self」),但是在IE8中這又打破了它被調用的頁面。

我敢肯定,這是一個愚蠢的問題.... :-)

感謝

+2

不要以用戶的名義安靜地做這件事。將它添加爲html鏈接。 – Raynos 2011-03-10 20:05:05

+0

javascript是由鏈接執行的。 mailto的內容是動態的,所以我們需要先做一點javascript來確定發送郵件的正文 – 2011-03-10 21:06:08

回答

9

我不認爲這是愚蠢了!這是一個好的開始。接下來我會嘗試的僅僅是在jQuery中創建一個實際的鏈接對象,將其附加到正文,然後單擊()。

//window.location.href = sMailTo; 
$('<a href="' + sMailTo + '">click</a>').appendTo('body').click().remove(); 

只要將正常運行的Escape()函數你使用擺脫所有的報價和正確編碼的HTML。

但是我不得不說,這可能很難得到只是沒錯。如果它仍然不起作用,我建議在服務器端進行鏈接POSTS所需的所有html。

3

如果你使用jQuery,那麼你可以根據你建立的標記輕鬆創建一個元素(指this answer爲例),然後通過簡單地做這個調用鏈接的點擊事件:

element.click(); 
+0

Safari會阻止允許觸發click()事件! – Anirban 2014-04-02 23:48:34