You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

现有JS页面浏览追踪脚本添加事件追踪功能报错求助

问题与解决方案:页面加载后无法触发事件追踪(_viq.push is not a function)

问题核心

初始嵌入脚本中,_viq被定义为数组,用来预加载trackPageView、setAccount等追踪指令;但加载tracking.js后,_viq被替换为vInsight实例对象,丢失了push方法,导致后续点击、滚动等事件调用_viq.push()时触发_viq.push is not a function错误。

解决方案

修改tracking.js代码,给vInsight实例添加push方法,让后续指令能继续被解析执行:

1. 给vInsight类添加push方法

修改vInsight构造函数,新增push方法兼容数组式指令调用:

vInsight = function(queue) {
    this.queue = new vInsight.Queue(queue);
    // 新增push方法,处理后续传入的追踪指令
    this.push = function(command) {
        if (Array.isArray(command) && command.length > 0) {
            var method = this.queue[command[0]];
            if (typeof method === 'function') {
                method.apply(this.queue, command.slice(1));
            }
        }
    };
}

2. 更新trackEvent方法支持参数接收

修改vInsight.Queue.prototype中的trackEvent方法,使其能处理传入的事件数据:

trackEvent: function(eventData) {
    var sessionId = Cookies.get('session_id');
    var data = {
        tenant: this._accountId,
        session_id: sessionId,
        event_type: 'user_interaction',
        event_details: eventData,
        timestamp: new Date().getTime(),
        current_page: context.location.href
    };

    // 发送事件数据到API
    fetch(API_LOC + 'track-event', {
        method: 'POST',
        body: JSON.stringify(data),
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
            'X-Tenant': this._accountId
        }
    })
    .then(response => response.json())
    .catch(err => console.error('事件上报失败:', err));
}

3. 测试点击事件

现在可以正常使用以下按钮代码触发事件追踪:

<button onclick="_viq.push(['trackEvent',{download:'has been clicked'}])">click</button>

4. 滚动事件示例(可选)

如果需要监听滚动到指定位置的事件,可添加如下代码:

// 监听页面滚动,触发指定区域的滚动追踪
window.addEventListener('scroll', function() {
    var scrollPosition = window.scrollY + window.innerHeight;
    var targetElement = document.getElementById('target-section');
    if (targetElement && scrollPosition >= targetElement.offsetTop) {
        // 防止重复触发
        if (!targetElement.dataset.tracked) {
            _viq.push(['scrollToEvent', {section: 'target-section'}]);
            targetElement.dataset.tracked = 'true';
        }
    }
});

同时完善vInsight.Queue.prototype中的scrollToEvent方法:

scrollToEvent: function(scrollData) {
    console.log('触发滚动追踪:', scrollData);
    // 此处添加滚动事件的上报逻辑,参考trackEvent实现
}

内容的提问来源于stack exchange,提问作者user27322639

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 14:14:52