尝试使用Google趋势中的嵌入脚本会导致在Chrome下出现以下错误。
Refused to display 'url' in a frame because it set 'X-Frame-Options' to 'sameorigin'.
我已将脚本放在index.html
的正文中,并将其托管在本地以及外部服务器上。
据我所知,这是为了停止“点击劫持”,但是Google提供的脚本不适用于自己的浏览器似乎很奇怪。 Firefox可以正常工作。
这是Google趋势嵌入的一个基本问题,只是不能与Google自己的产品一起使用,还是我的服务器设置存在问题?
答案 0 :(得分:2)
这是因为您的浏览器已设置为阻止第三方Cookie。启用第三方Cookie,嵌入式Google趋势iframe即可使用。
如果您仔细查看失败的iframe请求,它将包含以下标头:
p3p:CP =“这不是P3P政策!有关更多信息,请参见g.co/p3phelp。”
标头链接到this page并附有以下说明:
在某些情况下,我们用来保护和验证您的Google帐户并存储您的偏好的cookie可能会从与您访问的网站不同的域中提供。例如,如果您使用Google +1按钮访问网站,就会发生这种情况。
某些浏览器需要第三方cookie才能使用P3P协议声明其隐私惯例。但是,P3P协议在设计时并未考虑到此类情况。因此,我们在Cookie中插入了一个链接,该链接将用户定向到一个页面,使他们可以了解有关这些Cookie的隐私惯例的更多信息。
答案 1 :(得分:0)
很久以前,当我从事基于春季的项目时,我就面临着同样的问题。我可以预先告诉您一件事,那就是Google趋势不是问题,您需要通过稍微更改请求来解决它。
使用请求标头,您需要发送一个附加标头X-Frame-Options
并将其值设置为SAMEORIGIN
。
由于有关类似问题的讨论here,因此我没有提供详细信息。
希望这会有所帮助!
更新1:
不要对X-Frame-Options
和您要嵌入的框架感到困惑。当您尝试在网页上嵌入框架时,浏览器会检查您是否允许SAMEORIGIN
。默认情况下,未启用它,因此您会收到错误消息。但是在您的后端代码中,如果您配置的方式是,对于每个请求,您的框架都将标头添加为X-Frame-Options
,而其值则为SAMEORIGIN
,那么浏览器将允许它。
请注意,SAMEORIGIN
将允许您网站上的每个网页,并且可能导致安全问题。因此,另一种选择是,您只需使用ALLOW-FROM标记设置Google趋势网站即可,而不是sameorigin
。
(根据您的评论,您使用的是Laravel框架(我从未使用过php),this link对您有用。或者您可以在Google上搜索“如何在laravel中设置x-frame-options sameorigin “。