我们有这个speedbump代码,向用户提供他们即将离开网站的通知(它是ADA的事情)。它看起来像在正则表达式中完成,我现在被要求支持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');
}
}
});
基本上,如果用户点击的链接与当前主机名不匹配,我们会向他们显示一个弹出窗口,提醒他们他们即将离开该网站。
白名单部分是一个单独的逻辑,允许主机名的白名单忽略speedbump弹出窗口(即,主机名不显示它)。
更新&可能的解决方案
我最后改变了:
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%肯定。仍在测试以确认它是一个可行的解决方案。