【发布时间】:2022-01-03 15:18:30
【问题描述】:
TL;DR
我将Meta Developers Page for a Facebook Like Button 生成的确切代码插入this CodePen 但按钮未显示(宽度和高度均为0px)
目标
在我们的 Angular 12 应用程序中,我们希望在视频中包含三件事:
- Facebook 赞按钮
- Facebook 分享按钮
- Pinterest Pin 按钮
我为每个组件创建了组件,它们触发将脚本标签写入 DOM 以获取 JS 库(我们使用 NGXS 进行异步操作)。
facebook-share-button.component.ts
const SCRIPT_ID = 'facebook-share-button';
@Component(...)
export class FacebookShareButtonComponent implements AfterViewInit, OnDestroy {
@Select((state) => state.router.state.fullUrl) fullUrl$: Observable<string>;
constructor(private store: Store) {}
ngAfterViewInit() {
this.store.dispatch(
new CoreActions.LoadScript(
SCRIPT_ID,
'https://connect.facebook.net/de_DE/sdk.js#xfbml=1&version=v12.0',
{ async: true }
)
);
}
ngOnDestroy() {
this.store.dispatch(new CoreActions.RemoveScript(SCRIPT_ID));
}
}
facebook-share-button.component.html
<div class="facebook-share-button">
<div id="fb-root"></div>
<div
class="fb-share-button"
[attr.data-href]="fullUrl$ | async"
data-layout="button"
data-size="large"
></div>
</div>
问题
Facebook Share Button 和 Pinterest Pin Button 工作正常,只有 Facebook Like 按钮不显示。它有 0px 的宽度和高度
完整代码
facebook-like-button.component.ts
import { AfterViewInit, Component, OnDestroy } from '@angular/core';
import { Select, Store } from '@ngxs/store';
import { Observable } from 'rxjs';
import { CoreActions } from 'src/app/core/core.actions';
const SCRIPT_ID = 'facebook-like-button';
@Component({
selector: 'app-facebook-like-button',
templateUrl: './facebook-like-button.component.html',
styleUrls: ['./facebook-like-button.component.styl'],
})
export class FacebookLikeButtonComponent implements AfterViewInit, OnDestroy {
@Select((state) => state.router.state.fullUrl) fullUrl$: Observable<string>;
constructor(private store: Store) {}
ngAfterViewInit() {
this.store.dispatch(
new CoreActions.LoadScript(
SCRIPT_ID,
'https://connect.facebook.net/de_DE/sdk.js#xfbml=1&version=v12.0',
{ anonymous: true, nonce: '4j5id3DJ' }
)
);
}
ngOnDestroy() {
this.store.dispatch(new CoreActions.RemoveScript(SCRIPT_ID));
}
}
facebook-like-button.component.html
<div class="facebook-like-button">
<div id="fb-root"></div>
<div
class="fb-like"
[attr.data-href]="fullUrl$ | async"
data-width="77"
data-layout="standard"
data-action="like"
data-size="large"
data-share="false"
></div>
</div>
我尝试过的事情
- 删除 facebook-share-button 组件(可能两个脚本相互干扰)
- 将代码放入
ngOnInit()(而不是ngAfterViewInit()) - 设置静态
data-href属性(即移除异步管道) - 删除
facebook-share-button.component.html或facebook-like-button.component.html或两者中的<div id="fb-root"></div> - 将
<div id="fb-root"></div>移动到app.component.html - 玩转
.fb-like的选项,然后一一删除 - 在脚本标签中将
async、defer和crossorigin设置为不同的值 - 其他浏览器和停用 AdBlockers
- 手动包含脚本标签
- 在 Stackoverflow 上搜索有类似问题的人
- 以上所有内容的组合
但没有任何效果。
最后,我将developers.facebook.net 提供的确切代码包含在app.component.html 中,但仍然无法正常工作。我尝试在 Codepen 中输入它(见上文),但仍然没有 Button!
我觉得有点傻。我在这里做一些根本错误的事情吗......? ??? 你能帮忙吗?
【问题讨论】:
-
styleUrls: ['./facebook-like-button.component.styl'],行中是否缺少 e ?在您共享的 Codepen 中,没有与fb-like类关联的 CSS -
对我来说 Codepen 工作 (Chrome),你有没有像 EFF Privacy Badger 或 uBlock (uBlock Origin) 等添加拦截器?如果是,只需禁用这些扩展或取消阻止该站点,然后重新加载 codepen。
-
@BenSouchet 没有缺少 e,扩展名为
styl(用于 Stylus CSS 预处理器)。我省略了 CSS/Stylus 代码,因为它不相关。
标签: javascript html angular facebook ngxs