Google Analytics网页内分析如何运作?

CJD*_*CJD 6 javascript iframe analytics

Google Analytics(分析)具有"页内分析"视图,可直接在您自己的网站上显示点击率和其他信息.我正在寻找类似的东西来记录所有点击.

问题是我不确定Google如何实施他们的页内分析视图 - 他们似乎使用了一两个iframe,并将自己的HTML和JavaScript注入其他页面.

怎么会去做这样的事情 - iframes是最好的方式吗?如果domainX试图操纵domainY的呈现,你会如何避免Javascript的同源安全策略?

Tim*_*imo 9

这是一个非常有趣的问题.你是对的,同样的原始政策禁止注入JS.但谷歌分析有一个优势:它已经在你的网站(跟踪代码).

所以这是它的工作原理(据我所知):

  • 当您打开页内分析时,首先会转到https://www.google.com/analytics/reporting/iyp_launch
  • 此页面会重定向到您的网站,并在网址中添加Google会话(例如http://example.com/#gaso=THESESSION
  • 跟踪器现在检查引用者是否是iyp_launch并且设置了gaso.如果是,它不仅会加载跟踪器,还会注入请求更多数据和渲染叠加层所需的JS.这样,JS在框架(或窗口)内执行,并绕过同源策略.
  • 由于Google Anaytics已经跟踪了您的访问(即将您识别为查看上一页的用户),因此可以在此之后注入额外的JS以及跟踪器,直到您的访问结束(即您关闭页面).这样,单击链接后可以再次呈现叠加层.

所以我想底线是这样的:如果网站的所有者已经通过向您的网站添加您控制的脚本来信任您,那么可以进行页内分析等事情(这是一个很好的例子,为什么在这样做之前应该非常小心一个东西).如果您没有对该站点的访问权限,则可能无法绕过同源策略 - 至少,我无法想到另一种方法(除了可能通过您的服务器代理所有请求) ,但这会导致其他主要问题).


Alx*_*ndr -1

认为这可以很简单地完成。您注入 javascript,确保每当用户单击链接时,它都会请求/发布到 iframe 中的特殊页面。像这样的东西(jquery):

$('a').live('click', function() {
    $('#' + iframeid).attr('http://somedomain.com/my_magic_page.php?linkClicked=' + $(this).attr('id') + '&page=' + window.location.toString());
}
Run Code Online (Sandbox Code Playgroud)

不知道它是否会起作用。