我在扩展程序中实现了一个简单的Facebook“赞”按钮。但是,它似乎没有起作用。
我正在使用iframe
version of the "Like" button,因为我不需要任何额外的脚本。
<iframe src="//www.facebook.com/plugins/like.php?href=[dummy_text]&send=false&layout=button_count&width=100&show_faces=false&font&blah..." scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:21px;" allowTransparency="true"></iframe>
首先,按钮确实显示正确且正确:
但是,点击它后,它会以红色显示“错误”:
所以我想也许是因为(kind of stupid and) restricted policies added in manifest version 2?因为如果我把它放在常规网页上就可以了。 (点击“赞”按钮后显示“确认”。)
有关如何解决这个问题的想法吗?
答案 0 :(得分:6)
//www.facebook.com/...
是协议相对URL。当您在普通的http(s)网站上嵌入此类网址时,该网址会解析为http(s)://www.facebook.com/...
。但是,在Chrome扩展程序中,它会解析为chrome-extension://www.facebook.com/...
...
要解决此问题,请在网址前加上https:
,即使用https://www.facebook.com/...
。
执行此操作后,由于Content Security Policy,按钮仍然不会显示。为了获得理想的结果,您必须通过manifest文件放宽CSP来嵌入Facebook:
"content_security_policy": "script-src 'self'; object-src 'self'; frame-src https://www.facebook.com",
(您还可以将http网站列入白名单,例如使用
"script-src 'self'; object-src 'self'; frame-src http://www.facebook.com"
或
"script-src 'self'; object-src 'self'; frame-src http://www.facebook.com https://www.facebook.com"
)
答案 1 :(得分:2)
除了Rob W的建议 - 还有几点可以覆盖可能面临同样错误的其他人,但使用facebook app (即您已登录fb和在生成iframe代码期间,您会看到“此脚本使用您应用的应用ID:”上方带有下拉列表以选择fb app :
<head>
<!-- for Facebook -->
<meta property='og:image' content="http://example.com/logo.jpg"/>
<meta property='og:url' content="http://example.com"/>
<meta property="og:title" content="Example"/>
<meta property="og:description" content="Description"/>
<meta property="fb:admins" content="<admin name>" />
<meta property="fb:app_id" content="<app id>" />
<meta property="og:type" content="article" />
</head>
app id
必须与您的Facebook应用ID相匹配才能进行跟踪(如果上述参数相同,您甚至可以“转移”喜欢使用不同域名的其他网页)FB应用中设置的网址必须与html中的网址匹配,以及用于访问网页的网址。
如果这不成功,我会使用facebook'调试器' -
https://developers.facebook.com/tools/debug
只需输入您的网址,然后让facebook进行通知:)