0

我在银行网站上使用以下代码警告用户他们将离开网站。

$('a').filter(function() {
            return this.hostname && this.hostname !== location.hostname;
          })
          .click(function () {
             return window.confirm('Warning message here...');
            }); 
});

目前,当您点击网上银行登录时,您会看到弹出窗口。我需要能够排除不属于网站域名的特定 URL,以便我可以排除网上银行网站,但我不知道该怎么做。

任何帮助表示赞赏。

4

2 回答 2

1
$('body').on('click', 'a', function(e){
  if(this.hostname != 'mydomain.com' && this.hostname != 'www.mydomain.com'){
    if(!confirm('This is an external link. Are you sure you want to leave?')){
      e.preventDefault();
    }
  }
});

我在这里使用了事件委托来确保它捕获所有链接(包括注入的链接)。www.mydomain.com如果您有子域,例如 ( ) ,您可能需要添加多个域条件。

于 2014-09-04T21:31:09.923 回答
0

这是 Ryan 的答案的改进,它允许您阻止自己域上的特定路径以及外部链接。

它分别检查主机和路径 - 因此您可以阻止所有不来自您自己域的链接,以及您自己域上的特定路径。

如果用户单击被阻止的链接,“request_confirmation”函数会在允许导航离开当前页面之前请求用户确认。

我已将逻辑分解为多个函数,因此您可以轻松修改它。

$('body').on('click', 'a', function(e){
  return (should_link_be_blocked($(this).attr('href')))? request_confirmation() : true;
});

function should_link_be_blocked(link){
  var url = new URL(link);

  return should_host_be_blocked(url.hostname) || should_path_be_blocked(url.pathname);
}

  function should_host_be_blocked(host){
    return !(host.match(/([a-z0-9]+\.)?example.com/));
  }

  function should_path_be_blocked(path){
    var not_allowed = ['/block_me.html', '/block_another.html'];
    var block = false;

    not_allowed.forEach(function(n_a){
      block = (path == n_a)? true : block;
    });

    return block;
  }

function request_confirmation(){
  return confirm('This is an external link. Are you sure you want to leave?');
}

这是一个丑陋的例子:http ://codepen.io/anon/pen/Gjagi

于 2014-09-05T07:55:40.947 回答