Google Analytics未在FireFox上从iFrame发送页面视图

Google Analytics not sending page views from iFrame on FireFox

本文关键字:视图 iFrame Analytics 未在 FireFox 上从 Google      更新时间:2023-09-26

我们编写了一个小部件,供客户在其网站上使用。客户通过在其网站的页面上添加脚本标记来导入我们的小部件。然后,我们的脚本创建一个iframe(与父级同源),并在iframe内部加载代码库的其余部分。

我们希望能够使用谷歌分析在iframe内外进行跟踪。我们首先在iframe外部初始化GA(使用自定义GA对象名+跟踪器),以获得用户的GA生成的客户端ID。然后,我们使用postMessage在我们的iframe中发送这些信息,然后在iframe内初始化ga(不同的自定义ga全局名称+跟踪器名称)。

这一切都适用于Chrome、IE、Safari、Mobile Safari。然而,在FireFox(v28)中,从iframe内部发送的页面视图似乎都没有被接收到。

检查时,ga对象似乎已正确初始化,但似乎没有向谷歌发送任何内容。

如有任何建议,我们将不胜感激。

//myGa is the custom named ga global
            window.myGa('create', cfg.accountId, {
                'name'          : 'myga',
                'clientId'      : cfg.clientId,
                'storage'       : 'none',
                'cookieDomain'  : 'none'
            });
            window.myGa('myga.send', 'pageview', {
                'page'  : '/my/page',
                'title' : 'My Test Page'
            });

已解决:

问题在于我们创建iframe的方式。它导致analytics.js 中的checkProtocolTask失败

最小化检查协议任务:

    function Oa() {
        var a = M[B][E];
        if ("http:" != a && "https:" != a) throw "abort";
    }

澄清:

    //M[B][E] replaces document.location.protocol

在大多数浏览器中,它显示为"http:"并通过,但在FireFox中,它出现为"javascript:"并未通过测试。

解决方案是使用ga"set"方法覆盖任务实现。

    window.myGa('myga.set', 'checkProtocolTask', function(){});

(如果您不使用自定义名称,则将myGa替换为"ga",将myGa.set替换为"set")

应用此覆盖解决了问题。