1

我创建了一个类似于 Google Analytics 的脚本(在加载时创建脚本,将数据推送到数组,在托管脚本中用于将跟踪数据存储在数据库中)用于 Facebook 的 Instant Article,以便我可以在内部跟踪统计信息我的软件。但问题是 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'".

Instant Article 标记在预期代码块中的脚本是正确的:

<figure class="op-tracker">
   <iframe> [code] </iframe>
</figure>

我目前正在通过 Facebook 的调试页面进行调试:http ://ww.ia-tracker.fbsbx.com/instant_article_test?url=<share_url>

奇怪的是,有时我确实会从即时文章中获得一些统计信息到我的数据库中,但不是始终如一或在每个页面视图中。

Facebook 文档说您可以为您的跟踪器创建一个直接 URL,如下所示:

<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 字符串)时,所以理想情况下我想避免这种方法。

有没有其他人有过为此使用自定义跟踪脚本的经验?

4

1 回答 1

2

在搞砸了几天之后,我通过使用我的自定义跟踪脚本来让它工作op-trackeriframe src如下所示:

<figure class="op-tracker">
      <iframe src="http://my-url.com/tracker.php"></iframe>
</figure>

Facebook 文档并没有给出太多关于这种方法的内容,并且他们省略了一些信息:发送的第三个参数是引用者ia_referrer(返回为ia.facebook.com

$_GET然后,您可以在“tracker.php”脚本上使用和的组合$_SERVER来获取脚本所需的任何其他详细信息,例如:

    $instantArticleURL = urldecode($_GET['ia_share_url']);
    $HTTPreferrer = $_GET['ia_referrer'];
    $userAgent = $_SERVER['HTTP_USER_AGENT'];
    $visitorIP = $_SERVER['REMOTE_ADDR'];

您可能还需要将其包含header()在您的tracker.php中,以确保 Facebook 可以访问该脚本(显然,修改它以满足您的站点需求):

header("Access-Control-Allow-Origin: https://www.facebook.com");

希望这可以避免其他人几天的头痛:)

于 2017-02-21T15:03:13.910 回答