0

我正在为网页设置一个使用跟踪系统,当用户单击页面的某些元素时,该系统会将一些信息发送回服务器。我使用信标而不是传统的 ajax 发送信息,因为我将跟踪跨域,但是当单击的元素是链接时,我在 Chrome/Safari 中遇到了问题。

这是我的代码的简化版本,它演示了这个问题。

<!DOCTYPE html>
<head>
    <title>Tracking Test</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
    <div id="link">
        <a href="">link</a>
    </div>
    <div id="nolink">
        <div>nolink</div>
    </div>

    <script type="text/javascript">
    function track(event){
        var beacon = new Image();
        var location = "http://www.mypage.com/tracking?element=";
        if (event.target.parentNode.id =='link'){
            beacon.src = location + '"link"';
        } else if (event.target.parentNode.id == 'nolink'){
            beacon.src = location + '"nolink"';
        }
    }
    window.addEventListener('click', track, true);
    </script>
</body>
</html>

在 Firefox、Chrome 和 Safari 中,单击“nolink”会按预期将消息发送回服务器。单击“链接”会在 Firefox 中发送消息,但在 Chrome 和 Safari 中不会发送消息。(当然,在 IE 中没有任何作用,但我相信这是因为事件侦听器,所以我稍后会解决它)。

我还需要做些什么来确保在下一页加载之前发送消息吗?

如果有人想知道,在信标的另一端有一个 django 视图,如下所示:

def listener(request):
    logging.info(request.GET.get("element", "received a message but couldn't find an element"))
    return HttpResponse(status=200)
4

0 回答 0