#javascript #facebook #gatsby #facebook-messenger
Вопрос:
Я пытаюсь встроить Facebook Messenger в сайт Гэтсби. В инспекторе Chrome я вижу div с идентификатором=»fb-root», однако его высота равна 0 (ширина-ширина окна просмотра), а виджет чата не отображается.
После использования инструмента настройки в Настройках моей страницы Facebook -> Обмен сообщениями ->> Добавить мессенджер на свой веб-сайт, он генерирует некоторый 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 />
</>
);
Может ли кто-нибудь помочь в предположении, почему приложение может отображаться неправильно?
Спасибо
Ответ №1:
Я думаю, что ваш MessengerChat
теряет свои ограничения из-за wrapPageElement
упаковки. Попробуй:
export const wrapPageElement = ({ element, props }) => (
return <Layout {...props}>
{element}
<MessengerChat />
</Layout>
}
Имейте в виду , что wrapPageElement
это также должно быть установлено в gatsby-ssr.js
, как вы можете видеть в документах:
Примечание: В SSR API Гэтсби есть эквивалентный крюк. Рекомендуется использовать оба API вместе. Например, использование, проверьте использование redux.
Если использование макета не подходит для вашего варианта использования, попробуйте вручную добавить высоту в ваш MessengerChat
CSS.
Комментарии:
1. Привет, Ферран, спасибо, что ответил, ценю это. Я создал gatsby-ssr.js следуя примерам в документах. К сожалению, макет не подходит для моей настройки, поэтому я попытался вручную добавить высоту в раздел «fb-root». В нижней части каждой страницы теперь есть пустое место на той высоте, которую я добавил. Я проверил вкладку «Сеть», xfbml.customerchat.js загружается, не уверен, почему ничего не отображается.
2. Каков будет результат, если вы просто запустите
return <div>{element}<MessengerChat /></Layout>
3. Итак, чтобы подтвердить, у меня теперь есть wrapPageElement.js на корневом уровне, который содержит: const wrapPageElement = {{ элемент }} => ( ><div>{элемент}<div><MessengerChat /><MessengerChat /></div>); Это экспортируется в оба gatsby-browser.js и gatsby-ssr.js как: импорт пользовательского интерфейса из «./wrapPageElement»; экспорт const wrapPageElement = пользовательский интерфейс; При запуске сборки разработки я все еще вижу пробел внизу каждой страницы
4. Я предполагаю, что ваш код работает, однако я думаю, что браузер может блокировать ваши запросы. Посмотрите на вкладку Сеть. codesandbox.io/s/inspiring-rain-xp7n4?file=/gatsby-browser.js
5. Итак, Ферран был прав! Виджет чата заблокирован на локальном хостинге, и если вы используете предварительные просмотры развертывания или тестовый URL-адрес для тестирования своего сайта перед развертыванием, вам необходимо убедиться, что домен внесен в белый список в настройках вашей страницы Facebook.