2017-10-16 14 views
0

このスピードバンプコードでは、ユーザーがサイトを離脱しようとしていることを通知します(ADAのことです)。それは正規表現で行われているように見え、私は今もmailto:リンクをサポートするよう求められています。私は正規表現で最悪ですが、これは私の心をすでに揺さぶっています。誰にも指針はありますか?ここで外部リンク用のスピードバンプもmailtoリンクをサポートします

は、現在のホスト名の評価を扱う抜粋です:

基本的に
var re = new RegExp("^(http(s)?:)?\\/\\/([a-z0-9-_\\.]*\\.)?(" + whitelist.join("|").replace(/\./g, "\\.") + ")(\\/.*)?$", "i"); 

$('a').each(function() { 
    var hrefTest = $(this).attr('href'); 

    if (hrefTest) { 
     if (!re.test(hrefTest) && (hrefTest.substring(0,4) == 'http')) { 
      $(this).addClass('speedbump-enabled'); 
     } 
    } 
}); 

、ユーザーがクリックされたリンクは、現在のホスト名と一致しない場合、我々はそれらを警告、ポップアップでそれらを提示します彼らは現地を離れようとしています。

ホワイトリスト部分は、スピードバンプポップアップ(つまり、どのホスト名を表示しないか)を無視するホスト名のホワイトリストを可能にする別個のロジックです。

更新&解決策

私は変えることになった:

if (!re.test(hrefTest) && (hrefTest.substring(0,4) == 'http')) { 

...に...

if (!re.test(hrefTest) && ((hrefTest.substring(0,4) == 'http') || (hrefTest.substring(0,6) == 'mailto'))) { 

これはmailtoリンクのためのトリックを行っているようですまだ100%は確かではありません。それが実行可能な解決策であることを確認するためにまだテストしています。

+1

を参照してください?: 'to((http(s)?| mailto):)'は 'http'と' https'のサポートを拡張し、 'mailto'を正規表現のグループ演算子に含めます。 – bishop

+0

mailtoリンクにこの機能が必要なのはなぜですか?それらをクリックしても、ユーザーのブラウザはサイトから離れることはありません。 – CAustin

+0

私は知っています、そして私は@カスティンに同意しますが、私は既にこの事件をクライアントにしており、とにかく頑固に要求しました。残念ながら、これは起こることに変わります。 –

答えて

1

私は、mailtoの公式の定義について確認していない:リンクが、正規表現のマッチ、次のテストケースについてはWikipedia

mailto:(?:[a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)?(?:,[a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)*(?:[\?\&](?:(?:subject)|(?:body)|(?:b?cc)|(?:to))=[^\&\?\n]*)* 

に言及したすべての例は、おそらく `HTTP(S)を変更regex101