对于一个客户,我正在他们的网站上实施 Facebook Pixel,以允许他们收集营销统计数据。Facebook Pixel 在<head>
标签中使用以下 Javascript 实现:
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window,
document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '*****************');
fbq('track', 'PageView');
</script>
<noscript>
<img height="1" width="1" src="https://www.facebook.com/tr?id=***************&ev=PageView&noscript=1" />
</noscript>
如您所见,该脚本正在调用connect.facebook.net
域上的 Javascript 文件。当代码上传到生产服务器时,由于违反Content-Security-Policy
指令,我在 Chrome 控制台中收到以下错误:
Refused to load the script 'https://connect.facebook.net/en_US/fbevents.js' because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-inline' 'unsafe-eval' platform.twitter.com s3.amazonaws.com cdn.ckeditor.com cdn.syndication.twimg.com www.google-analytics.com ajax.googleapis.com player.vimeo.com".
我已经浏览了网站的源代码(它是用 PHP 构建的),并且该Content-Security-Policy
指令没有在任何地方配置。文件中也没有.htaccess
。虽然我不太确定,如果这可以在.htaccess
文件中完成。
如错误消息和上面的屏幕截图所示,在某处定义了一个Content-Security-Policy
指令,我需要找到它,所以我可以在那里将 Facebook 域列入白名单。我在想,这可能是在httpd.conf
我无法访问的文件中的服务器级别完成的,因为该网站是由外部托管服务提供商托管的。
所以我的问题是:如果不在 PHP 代码、html属性或文件中,可以在哪里配置指令?这可以在其他地方完成吗?Content-Security-Policy
<meta http-equiv>
httpd.conf