Facebook的“赞”按钮破坏了https/SSL

10
在我维护的电子商务网站上,我按照这里的说明添加了Facebook“赞”按钮:

http://developers.facebook.com/docs/reference/plugins/like

我正在使用 iframe 方法:

<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fexample.com%2Fpage%2Fto%2Flike&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" 
  scrolling="no" frameborder="0" style="border:none; overflow:hidden; 
   width:450px; height:80px;" allowTransparency="true">
</iframe>

它可以工作,但如果客户恰好已登录其帐户,则会出现臭名昭著的"混合内容警告"

是否有一种方法可以使用相同的Facebook“喜欢”按钮代码,但以不插入非https内容的方式在SSL模式下运行?

4个回答

20

您可以通过不指定传输协议来避免支持SSL的域名产生SSL警告。例如,使用//代替包含http://https://

改为

<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fexample.com%2Fpage%2Fto%2Flike&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>
使用
<iframe src="//www.facebook.com/plugins/like.php?href=http%3A%2F%2Fexample.com%2Fpage%2Fto%2Flike&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>

我不知道这个技巧。它适用于所有的浏览器吗?谢谢你介绍给我。 - Android Eve
2
这对于Facebook不起作用。问题是实际图片目前仅在他们的HTTP网站上。 - Noah
@Noah,它对我起作用了吗?@android-eve,当您将其留空时,用户代理将继承协议...这个技巧自早期的浏览器时代以来就已经存在... - todd
@todd,我不知道怎么做。如果你尝试通过https查看图片本身,你能看到吗?如果可以,你用的是什么URL来查看它? - Noah
@Noah,我看到这个精灵 https://s-static.ak.facebook.com/rsrc.php/v1/z7/r/ql9vukDCc4R.png 被请求了... 你可能需要在你的端更新“赞”按钮嵌入代码? - todd
@todd,啊,那里有一些图片,比如点赞的图片。但我们正在使用另一张图片。如果您访问此页面:https://developers.facebook.com/docs/reference/plugins/like/ 并查看带有“like”单词和蓝色边框的点赞按钮。这就是我们在https中找不到的东西。 - Noah

10

这里有个提示,facebook.com支持SSL加密 ;)


1
https://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fexample.com%2Fpage%2Fto%2Flike&layout=standard&show_faces=true&width=450&action=like&colorscheme=light&height=80 - Byron Whitlock
您的意思是要将上述<iframe>中的所有“http”替换为“https”吗?如果是这样,会有任何副作用吗?例如,在客户未登录时出现“混合内容”问题?或者…这会降低搜索引擎机器人爬行速度吗?(在上述网站上有成百上千个页面具有此按钮,如果答案是“是”,这可能会导致SEO方面的重大问题)。 - Android Eve
3
使用https替代http。当您使用ssl时,Facebook不会提供任何“混合”内容,因此应该正常工作。搜索引擎将不会加载iframe内容。您不是第一个遇到这个问题的人,这就是为什么他们同时提供http和https的原因。 - Byron Whitlock
有没有想过在直播流盒子中如何运作?我使用带有 HTTPS 的 iframe,但无法刷新 Box 页面。HTTP 可以正常工作。 - Pit Digger

1
你可以通过不指定传输协议来避免支持SSL的域名产生SSL警告,例如,使用//代替http://https://

而不是

<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fexample.com%2Fpage%2Fto%2Flike&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>

使用
<iframe src="//www.facebook.com/plugins/like.php?href=http%3A%2F%2Fexample.com%2Fpage%2Fto%2Fl

0
<iframe src="//www.facebook.com/plugins/follow?href=https%3A%2F%2Fwww.facebook.com%2Fludwika.karuna&amp;layout=standard&amp;show_faces=true&amp;colorscheme=light&amp;width=450&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>

1
尽管这段代码片段可以解决问题,但附上解释真的有助于提高帖子的质量。请记住,您正在为未来的读者回答问题,而这些人可能不知道您建议代码的原因。 - Bono

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接