Плагин Figma React PostMessage не работает должным образом - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь создать плагин для 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's документацию, получить объект из postMessage в code.ts. Это, однако, никогда не происходит; это никогда не будет вызвано вообще. Я не могу получить доступ к текущему выбору в ui.tsx, поэтому мне нужны данные из code.ts. Есть ли способ передать эти данные в ui.tsx, или кто-нибудь знает, почему это не работает?

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Я столкнулся с той же проблемой. В файле ui.tsx попробуйте добавить следующее:

window.onmessage = selection => {
   let message = selection.data.pluginMessage;
   console.log(message);
}
0 голосов
/ 16 апреля 2020

или попробуйте это ->

window.addEventListener("message", (selection) => {
    console.log(selection);
});

, это добавит еще один обработчик события сообщения в окно. если вы используете onmessage, он может перезаписать предыдущий обработчик!

...