使用javascript在某些页面链接上添加减速带,确认不会重定向

Adding speedbumps to some page links with javascript, confirm doesn't redirect

本文关键字:确认 重定向 添加 javascript 链接 使用      更新时间:2023-09-26

我正在vs2012中开发一个网站,使用ASP和VB后端,CSS和JavaScript。长话短说,如果一个链接把用户带离我们的网站,它需要有一个免责声明,说我们不负责什么的。我用下面的代码来做这件事…

$(document).ready(function () {
    var anchors = $("a").get();
    for (var i = 0; i < anchors.length; i++) {
        var anchor_element = anchors[i];
        var url = anchor_element.attributes[0].nodeValue;
        if ((url.indexOf('.com') != -1) || (url.indexOf('ForwardProcessing') != -1)) {
            anchor_element.onclick = function () {
                return window.confirm('The link you selected will take you to a third party website...'r'rClick <CANCEL> if you would like to stay.');
            }
        }
    }
});

所以这准确地找到了我正在寻找的链接,并附加了减速带很好(仅在IE中,但我将在一分钟内解释更多)。但是在运行时,当您单击ok时,鼠标指针变成了一个带有感叹号的手,页面没有改变。显然,JavaScript中出现了一些错误,但我无法在代码中找到放置断点的好地方,以查看可能发生的错误。

这就引出了第二个问题……这似乎只在IE中工作。我尝试使用firefox/firebug来查看js,并且从未发生过速度颠簸,用户直接进入下一页…这告诉我肯定有问题,但更少的信息。有JavaScript专家发现什么了吗?我对js还很陌生,在谷歌了一天之后,没有发现任何东西…

更新:问题似乎是弹出相关?在html中,我使用target = _blank在新选项卡中打开链接…把这个拿出来解决了这个问题,但我想使用新的选项卡…这其中有冲突吗?

尝试将以下onclick行更改为:

anchor_element.onclick = "return window.confirm('The link you selected will take you to a third party website...'r'rClick <CANCEL> if you would like to stay.');";

当然还要修复括号。我还没有测试过它,但我认为你可以比我更快地设置一个测试场景。如果它不工作,请告诉我。

编辑:刚刚测试了你的原始更改和我的更改,两者都很好,所以我的答案不是解决方案…你能把你的错误贴出来吗?我没有得到一个,除了当它重定向到www.google.com我得到一个错误的谷歌页面,但我的其他3个测试重定向页面工作良好。

这是我的测试代码…

<a href="http://www.google.com" target="_blank">Google</a><br />
<a href="http://www.microsoft.com" target="_blank">Microsoft</a><br />
<a href="http://www.apple.com">Apple</a><br />
<a href="http://www.stackoverflow.com">Stackoverflow</a><br />
<script type="text/javascript">
    $(document).ready(function () {
        var anchors = $("a").get();
        for (var i = 0; i < anchors.length; i++) {
            var anchor_element = anchors[i];
            var url = anchor_element.attributes[0].nodeValue;
            if ((url.indexOf('.com') != -1) || (url.indexOf('ForwardProcessing') != -1)) {
                anchor_element.onclick = "return window.confirm('The link you selected will take you to a third party website...'r'rClick <CANCEL> if you would like to stay.');";                    
            }
        }
    });

页面中没有其他内容,它可以工作。

编辑2:我使用IE11测试了弹出窗口拦截器,没有遇到任何问题。网站打开在一个新的标签没有问题。弹出窗口拦截器设置为" medium "

最后,这段代码有两个问题。首先,我需要使用anchor_element。href -> IE识别属性[0]为href,但在firefox中,这是一个CSS值。指定是哪个属性解决了这个问题

它在IE中不起作用的原因是,在IE中,确认链接后没有跟进,这有点尴尬。我在IE中关闭了弹出窗口拦截器…但不在我的谷歌工具栏中。:/

但我来这里只是因为其他人确认它对他们有效。谢谢大家!