34

Web ページの mailto リンクで、デフォルトの電子メール クライアントが開きます。Chrome が Gmail をデフォルトの電子メール クライアントとして設定する機能を提供するようになったので、一部のユーザーはリンクを同じウィンドウで開き、リンクをクリックしたページから離れてしまいます (これは気に入らないことです)。

リンクに target _blank を追加してみました。これは gmail ユーザーには効果的ですが、mailto リンクをクリックするたびに新しい空白のタブが開くため、Outlook ユーザーを怒らせます。

デフォルトの電子メール ハンドラーを検出し、両方のタイプのユーザーに優れたエクスペリエンスを提供する方法はありますか?

4

3 に答える 3

17

さて、これを Mac の Chrome で動作させることができました。あなたのマイレージは異なる場合があります。また、これはかなりハックな IMO であるため、価値がない可能性があります。正直なところ、これは Chrome 内の設定として存在する必要があり、動作は Web サイトに委任する必要があります。たとえば、Chrome には「[x] mailto リンクを常に別のタブで開く」というオプションが必要です。

そうは言っても、これがあなたのやり方です。

最初に次のようにリンクを作成します。

<a href="#" data-mailto="somebody@email.com">Mail Somebody</a>

次に、それらのクリック ハンドラーを設定します。

$('a[data-mailto]').click(function(){
  var link = 'mailto.html#mailto:' + $(this).data('mailto');
  window.open(link, 'Mailer');
  return false;
});

微調整できるオプションのoptions引数があります。window.open実際、生成されたウィンドウをできるだけ目立たなくすることができるかどうかを確認するために、ほとんどお勧めします。 https://developer.mozilla.org/en/DOM/window.open

http://www.w3schools.com/jsref/met_win_open.asp (MDN ドキュメントは網羅的ですが、w3schools ドキュメントはほとんど読みやすいです)

次に、mailto.html ページを作成する必要があります。ここで、以下に示すタイムアウトをいじる必要があるかもしれません。おそらく、これを 500ms のような非常に短い値に設定することもできます。

<html>
<script>
function checkMailto(hash){
    hash = hash.split('mailto:');
    if(hash.length > 1){
        return hash[1];
    } else {
        return false;
    }
}

var mailto = checkMailto(location.hash);

if(mailto){
    location.href = 'mailto:'+mailto;
    setTimeout(function(){
      window.close();
    }, 1000);
}
</script>
</html>

結果

私のデフォルトの電子メールリーダーとして設定されたMail.app:

リンクをクリックすると、一瞬ウィンドウが開き、空白のメッセージが作成されます。ブラウザでは元のページに戻ります。

[設定] > [詳細設定] > [プライバシー] > [ハンドラー] で Gmail をメール リーダーとして設定:

リンクをクリックすると、Gmail の新しいタブが開き、前のページが独自のタブに安全に表示されます。

注: Gmail をメール ハンドラとして設定すると、OS 側 (少なくとも Mac では) で、Chrome がシステムのメール ハンドラとして設定されます。そのため、Gmail を Chrome 内のメール ハンドラとしてオフにしても、OS レベルで設定されたままになります。それをリセットするために、私は Mail > Prefs > General に行きました。そして、デフォルトのメールリーダーをメールに戻します。

于 2012-07-21T19:34:51.003 に答える