Плагин 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)
}
Другие вопросы по тегам