我创建了一个类似于Google Analytics的脚本(在加载时创建脚本,将数据推送到数组,在托管脚本中使用以将跟踪数据存储在数据库中),以便在Facebook的即时文章中使用,以便我可以跟踪我的软件内部统计数据。但问题是Facebook给出了关于我的脚本的CSP错误:
Refused to load the script 'https://My-Domain.com/js/w_analytics.js'
because it violates the following Content Security Policy directive:
"script-src *.facebook.com *.fbcdn.net *.facebook.net *.google-analytics.com
*.virtualearth.net *.google.com 127.0.0.1:* *.spotilocal.com:*
'unsafe-inline' 'unsafe-eval' fbstatic-a.akamaihd.net
fbcdn-static-b-a.akamaihd.net *.atlassolutions.com blob: data: 'self'".
即时文章标记在预期的代码块中都是正确的:
<figure class="op-tracker">
<iframe> [code] </iframe>
</figure>
我目前正在通过Facebook的调试页面进行调试: http://ww.ia-tracker.fbsbx.com/instant_article_test?url= <share_url>
奇怪的是,偶尔我会从Instant Article获取一些统计信息到我的数据库,但不是一致或在每个页面视图上。
Facebook文档说您可以直接访问跟踪器,例如:
<figure class="op-tracker">
<iframe src="http://my-url-tracker.com/">
<!--
The request to http://my-url-tracker.com/ will be rewritten to
include the following query parameters:
ia_share_url: The URL the user shared
ia_title: The article title
-->
</iframe>
</figure>
但问题是它说它只发送这两个参数,当我自己的跟踪器获取我的软件所需的更多信息(例如UA字符串)时,理想情况下我想避免这种方法。 / p>
是否有其他人有使用自定义跟踪脚本的经验?
答案 0 :(得分:1)
在对此进行了几天的讨论之后,我使用op-tracker
和iframe src
到我的自定义跟踪脚本来实现它,如下所示:
<figure class="op-tracker">
<iframe src="http://my-url.com/tracker.php"></iframe>
</figure>
Facebook文档对此方法没有太大帮助,它们省略了一小部分信息:发送了第三个参数,即引用者ia_referrer
(返回为ia.facebook.com
)
然后,您可以在“tracker.php”脚本中使用$_GET
和$_SERVER
的组合来获取脚本所需的任何其他详细信息,例如:
$instantArticleURL = urldecode($_GET['ia_share_url']);
$HTTPreferrer = $_GET['ia_referrer'];
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$visitorIP = $_SERVER['REMOTE_ADDR'];
您可能还需要在 tracker.php 中加入此header()
,以确保Facebook可以访问该脚本(明显地修改它以满足您的网站需求):
header("Access-Control-Allow-Origin: https://www.facebook.com");
希望这可以为其他人节省几天的麻烦:)