Плагин Figma React PostMessage не работает должным образом
Я пытаюсь создать плагин для Figma, и до сих пор все шло хорошо. Он основан на примере реакции, который они предоставляют на своей странице github: https://github.com/figma/plugin-samples/tree/master/react
В этом примере я создал кнопку, которая при нажатии будет вызывать эту функцию:
(file: ui.tsx)
onClick = () => {
parent.postMessage({pluginMessage: {type: 'GetData'}}, '*');
};
Это parent.postMessage - функция, которую figma предоставляет для связи с другим файлом в проекте, code.ts. Этот файл получит сообщение postMessage с параметром pluginMessage как параметр, который работает должным образом. Код code.ts, который получает это, выглядит так:
(file: code.ts)
figma.ui.onmessage = msg => {
if (msg.type === 'GetData') {
figma.ui.postMessage({"title": figma.currentPage.selection[0].name});
}
};
Этот файл получает сообщение и попадает в оператор if, так как GetData был установлен. До сих пор все хорошо и хорошо. Проблема, с которой я сталкиваюсь, - это figma.ui.postMessage({}), который должен выполнять обратный вызов функции onmessage в ui.tsx:
(file: ui.tsx)
onmessage = (selection) => {
console.log(selection);
};
Эта функция onmessage, согласно документации Figma, должна получать объект из сообщения postMessage в code.ts. Однако этого никогда не происходит; он вообще никогда не будет вызван. Я не могу получить доступ к текущему выбору в ui.tsx, поэтому мне нужны данные из code.ts. Есть ли способ передать эти данные в ui.tsx, или кто-нибудь знает, почему это не работает?
3 ответа
Я столкнулся с той же проблемой. Внутри вашегоui.tsx
файл, попробуйте добавить следующее:
window.onmessage = selection => {
let message = selection.data.pluginMessage;
console.log(message);
}
Или попробуйте это ->
window.addEventListener("message", (selection) => {
console.log(selection);
});
это добавит в окно еще один обработчик событий сообщения. если вы используете onmessage, он может перезаписать предыдущий обработчик!
ставить первым из скрипта
onmessage = event => {
console.log("got this from the plugin code", event, event.data.pluginMessage)
}