我需要将代码添加到一堆页面中,这些页面会在点击时监视链接并发送ajax请求。
对Ajax调用的响应不相关或不需要,但我需要能够可靠地发送它,然后允许链接或按钮,以便执行以前要做的事情。
我知道这是由Omniture和谷歌分析代码完成的,但是在通过这两个JavaScript库之后,我似乎无法弄明白。
有没有人知道这些人中的任何一个如何处理这个问题?
感谢。
上下文:我需要这样做的原因是因为我在点击链接时在许多不同页面上添加了对自定义API的调用(实际链接是从CMS输入中匹配的文本,所以我真的不知道它是什么)。这将打击许多代码库,其中包含许多方法来处理链接和按钮。有时会有自己的JS事件,有时是onclick
处理程序,有时候是同一个窗口的本地链接,有时候是一个新窗口...重点是无论点击什么......我正在进入痛苦的世界如果我试图取消并重新启动它。我不会,也不能,控制这些代码库,我必须非常不引人注意我的方法。我的想法是,我需要在没有e.preventDefault()
或return false
的情况下通过单击监听器接听呼叫,因为这可能会破坏页面的预期功能。
我想过做一个同步的ajax调用,但它看起来很脏。那个并且它被弃用了。我真的想避免这种情况。我知道Omniture增加了500毫秒的延迟,但我不知道 HOW 他们这样做了。
答案 0 :(得分:1)
如果我的问题正确,您可以查找发送请求的内容,而不会阻止页面导航。
如果是,那么你可能正在寻找:
https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon
如果不支持发送信标方法:您应该使用img来完成工作。阅读文章的描述部分。
更多细节和示例可以在这里找到:
https://www.w3.org/TR/beacon/#sec-sendBeacon-method
<html>
<script>
// emit non-blocking beacon to record client-side event
function reportEvent(event) {
var data = JSON.stringify({
event: event,
time: performance.now()
});
navigator.sendBeacon('/collector', data);
}
// emit non-blocking beacon with session analytics as the page
// transitions to background state (Page Visibility API)
document.addEventListener('visibilitychange', function() {
if (document.visiblityState === 'hidden') {
var sessionData = buildSessionReport();
navigator.sendBeacon('/collector', sessionData);
}
});
</script>
<body>
<a href='http://www.w3.org/' onclick='reportEvent(this)'>
<button onclick="reportEvent('some event')">Click me</button>
</body>
</html>
答案 1 :(得分:0)
所以看起来可能只是涉及一个简单的无操作循环。我仍然没有在谷歌或adobe分析中找到代码库的一部分,但这似乎有效:
wait = function(delay){
now = new Date().getTime();
then = now + parseInt(delay);
while(now < then){
now = new Date().getTime();
}
return delay;
}
这可以置于单击侦听器中,以防止事件冒泡delay
毫秒。在我的Chrome测试中,如果延迟超过999
并且链接有target="_blank"
,Chrome似乎将其视为弹出窗口并阻止它。但这很好,因为如果你正在做一个新窗口,当前窗口不会被破坏,而且ajax调用有时间完成。
我想我会尝试这个,即使它很臭,因为这个惊人的新灯塔并没有得到我需要的报道。