如何检测用户点击了内部或外部链接
How to detect a user clicked on an internal or external link
我需要知道用户是点击了内部链接还是外部链接来提醒他们
我的网站上有许多内部和外部链接
我的内部链接是这样的:
<a href="about.php">about</a>
<a href="tools/draw.php">draw graph</a>
我只需要在单击外部链接时发出警报。
(我在这里包括了两个方法:一个方法使用jQuery,另一个不使用jQuery。如果你不想使用jQuery的话,跳到粗体标题)
一种方法是向每个外部链接添加一个类,然后向该类中的所有内容附加一个事件处理程序,当您单击链接时会引发警报。不过,这很乏味,因为您必须将类添加到每个外部链接的中,而这不适用于用户生成的内容。
您可以使用jQuery和CSS选择器a[href^="http"]
来选择所有外部链接,然后附加一个事件处理程序,在单击它们时引发警报:
$('a[href^="http"]').click(function() {
alert();
});
a[href^="http"]
的意思是"一个有链接的a
标签,该链接必须以'http'开头。"因此,在这里,我们选择所有以http
开头的元素,即每个外部链接,然后将其设置为当您单击它们时,会弹出警报。
非jQuery方法
如果要在没有jQuery的情况下执行此操作,则需要使用document.querySelectorAll('a[href^="http"]')
并绑定该函数返回的数组中每个元素的click事件。看起来像这样:
var externalLinks = document.querySelectorAll('a[href^="http"]');
for (var i = externalLinks.length-1; i >= 0; i--) {
externalLinks[i].addEventListener("click", function() { alert(); }, false);
}
我不得不在自己的网站上从头开始做这件事,所以我只需要为您复制并粘贴它。它来自我的一个对象内部,所以如果我留下一些this
关键字,你可以删除它们。
function leaving() {
var links = document.anchors || document.links || document.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
if ((links[i].getAttribute('href').indexOf('http') === 0 && links[i].getAttribute('href').indexOf('fleeceitout') < 0) && (links[i].getAttribute('href').indexOf('/') !== 0 && links[i].getAttribute('href').indexOf('#') !== 0) && links[i].className.indexOf('colorbox') < 0) {
addEvent(links[i], 'click', this.action);
}
}
}
function action(evt) {
var e = evt || window.event,
link = (e.currentTarget) ? e.currentTarget : e.srcElement;
if (e.preventDefault) {
e.preventDefault();
} else {
window.location.href = link.href;
return;
}
var leave = confirm("You are now leaving the _______ website. If you want to stay, click cancel.");
if (leave) {
window.location.href = link.href;
return;
} else {
return leave;
}
}
var addEvent = function (element, myEvent, fnc) {
return ((element.attachEvent) ? element.attachEvent('on' + myEvent, fnc) : element.addEventListener(myEvent, fnc, false));
};
用你的网站域名(microsoft.com等)替换"fleiceiout"实例,你就设置好了。
最简单的方法是使用jQuery,为外部链接使用一个特殊的类,或者检查URL中的"http://"。
像这样,如果使用特殊类:
$("a.external").on("click", function() {
//de Do something special here, before going to the link.
//de URL is: $(this).attr("href")
});
然后在HTML:中
<a href="http://external.link" class='external'>external link</a>
或者,您可以在URL中检查http://
!那你就不需要特殊的课程了。
$('a[href=^"http://"]').on("click", function() {
//de Do something special here, before going to the link.
//de URL is: $(this).attr("href")
});
引用:我最初测试"http://"的方法有点慢,实际上是在.attr("href")
上进行indexOf
测试,所以我使用了@Matthew的选择器选择。忘记了插入符路由!向@Matthew提议,以及非jQuery替代方案。
$(document).ready(function() {
$('a').click(function() {
var returnType= true;
var link = $(this).attr('href');
if ( link.indexOf('http') >= 0 ) {
returnType=confirm('You are browsing to an external link.');
}
return returnType;
});
});`
- 从内部链接进入页面时,引导模式未打开
- Cordova包装应用程序内部链接加载在应用程序中,外部链接加载在浏览器中
- 谷歌分析跟踪内部链接不正常工作的事件
- 如何自动将页码添加到HTML页面上的所有内部链接
- 将内部链接分配给视差网站的不同部分
- url中没有id的内部链接
- 如何使用JS抓取页面以获取内部链接?它也必须递归地完成
- 在不增加分析跳出率的情况下,绑定网页上的内部链接以动态加载
- 基础标题手风琴上的内部链接
- 用于获得“;两个不同的滚动速度“;在这个网站上?(请参阅内部链接)
- 将表单元格数据转换为单独.js文件中的内部链接
- 内部链接返回空错误,我在 Javascript 中找不到错误.外部链接工作得很好
- 当我单击内部链接时,全屏正在退出
- 内部链接正在被mod_pagespeed更改
- 跳转到内部链接而不更改地址栏
- 平滑滚动到内部链接的最佳方式
- 内部链接强制滚动到页面顶部
- 更改内部链接向下滚动页面的距离
- 内部链接重定向到另一个页面
- 使内部链接成为外部链接