如何将 Facebook Messenger 嵌入到 Gatsby 站点中?
How to embed Facebook Messenger into a Gatsby Site?
我正在尝试将 Facebook Messenger 嵌入到 Gatsby 网站中。在 Chrome 的 Inspector 中,我可以看到一个带有 id="fb-root" 的 div,但是它的高度为 0(宽度是视口的宽度)并且没有出现聊天小部件。
在我的 Facebook 页面的设置 -> 消息 -> 将 Messenger 添加到您的网站中使用设置工具后,它会生成一些 html 代码,这些代码不能在 Gatsby(或任何 React 框架)中使用) 站点。
使用代码,我可以创建一个名为 MessengerChat.js 的自定义组件,其中包含以下内容:
import React, { useEffect } from "react";
function MessengerChat() {
useEffect(() => {
window.fbAsyncInit = function () {
window.FB.init({
xfbml: true,
version: "v10.0",
});
};
(function (d, s, id) {
var js,
fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s);
js.id = id;
js.src = "https://connect.facebook.net/en_US/sdk/xfbml.customerchat.js";
fjs.parentNode.insertBefore(js, fjs);
})(document, "script", "facebook-jssdk");
});
return (
<>
<div id="fb-root" />
<div
className="fb-customerchat"
attribution="page_inbox"
page_id="XXXXXXX"
/>
</>
);
}
export default MessengerChat;
然后,在 gatsby-browser.js 我可以使用下面的代码:
import MessengerChat from "./src/MessengerChat";
export const wrapPageElement = ({ element }) => (
<>
{element}
<MessengerChat />
</>
);
任何人都可以帮助提出应用可能无法正确显示的原因吗?
谢谢
我认为您的 MessengerChat
由于 wrapPageElement
包装而失去了约束。尝试:
export const wrapPageElement = ({ element, props }) => (
return <Layout {...props}>
{element}
<MessengerChat />
</Layout>
}
请记住,wrapPageElement
也需要在 gatsby-ssr.js
中设置,如您在 docs:
中所见
Note: There is an equivalent hook in Gatsby’s SSR API. It is
recommended to use both APIs together. For example usage, check out
Using redux.
如果使用布局不适合您的用例,请尝试使用 CSS 向您的 MessengerChat
手动添加高度。
我正在尝试将 Facebook Messenger 嵌入到 Gatsby 网站中。在 Chrome 的 Inspector 中,我可以看到一个带有 id="fb-root" 的 div,但是它的高度为 0(宽度是视口的宽度)并且没有出现聊天小部件。
在我的 Facebook 页面的设置 -> 消息 -> 将 Messenger 添加到您的网站中使用设置工具后,它会生成一些 html 代码,这些代码不能在 Gatsby(或任何 React 框架)中使用) 站点。
使用代码,我可以创建一个名为 MessengerChat.js 的自定义组件,其中包含以下内容:
import React, { useEffect } from "react";
function MessengerChat() {
useEffect(() => {
window.fbAsyncInit = function () {
window.FB.init({
xfbml: true,
version: "v10.0",
});
};
(function (d, s, id) {
var js,
fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s);
js.id = id;
js.src = "https://connect.facebook.net/en_US/sdk/xfbml.customerchat.js";
fjs.parentNode.insertBefore(js, fjs);
})(document, "script", "facebook-jssdk");
});
return (
<>
<div id="fb-root" />
<div
className="fb-customerchat"
attribution="page_inbox"
page_id="XXXXXXX"
/>
</>
);
}
export default MessengerChat;
然后,在 gatsby-browser.js 我可以使用下面的代码:
import MessengerChat from "./src/MessengerChat";
export const wrapPageElement = ({ element }) => (
<>
{element}
<MessengerChat />
</>
);
任何人都可以帮助提出应用可能无法正确显示的原因吗?
谢谢
我认为您的 MessengerChat
由于 wrapPageElement
包装而失去了约束。尝试:
export const wrapPageElement = ({ element, props }) => (
return <Layout {...props}>
{element}
<MessengerChat />
</Layout>
}
请记住,wrapPageElement
也需要在 gatsby-ssr.js
中设置,如您在 docs:
Note: There is an equivalent hook in Gatsby’s SSR API. It is recommended to use both APIs together. For example usage, check out Using redux.
如果使用布局不适合您的用例,请尝试使用 CSS 向您的 MessengerChat
手动添加高度。