Отправка POST-запроса в iframe задачи Microsoft Teams - PullRequest
0 голосов
/ 12 марта 2020

В настоящее время у меня есть бот Microsoft Teams, у которого есть кнопка расширения, которая открывает страницу HTML в фрейме. На странице HTML есть форма с кнопкой отправки, которая отправляет информацию, введенную пользователем. Проблема, с которой я сталкиваюсь, заключается в том, что когда пользователь нажимает кнопку отправки, он не выполняет HTTP-запрос POST. Я проверил iframe вне команд, и он отлично работает. Мне было интересно, если это проблема с тем, как у меня есть iframe или фактическая HTML страница настройки или что-то еще. Спасибо!

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Вы используете функцию microsoftTeams.tasks.submitTask() или просто пытаетесь выполнить POST напрямую? Я подозреваю, что вы делаете последнее. Команды должны отвечать за фактическую подачу, потому что в противном случае они даже не подозревают, что POST когда-либо происходил, поскольку это происходит в <iframe>.

Если это ваша проблема, вот пример того, как это сделать. Это отрывок кода JS / Pug из образца, работающего на Azure; Я только что проверил, и он отлично работает:

  [...]

  function validateForm() {
    let customerInfo = {
      name: document.forms["customerForm"]["name"].value,
      email: document.forms["customerForm"]["email"].value,
      favoriteBook: document.forms["customerForm"]["favoriteBook"].value
    }
    guidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
    let password = document.getElementById("pw").value;
    if (guidRegex.test(password)) {
      microsoftTeams.tasks.submitTask(customerInfo, password); // hidden feature to test bogus completion appId
    }
    else {
      microsoftTeams.tasks.submitTask(customerInfo, "#{appId}"); //- appId is passed at render time in tabs.ts
    }
    return true;
  }

[...]

div(class='surface')
  div(class='panel')
    div(class='font-semibold font-title') Enter new customer information:
    form(method='POST' id="customerForm" action='/register' onSubmit="return validateForm()")
      div
        div.form-group(class="form-field-input" style="margin-bottom: 10px; margin-top: 10px")
        label(for='name') Name: 
        input#name.form-control.input-field(type='text', placeholder='first and last' name='name' tabindex=1 autofocus)
        div.form-group(class="form-field-input" style="margin-bottom: 10px;")
        label(for='email') Email: 
        input#email.form-control.input-field(type='email', placeholder='name@email.com' name='email' tabindex=2)
        div.form-group(class="form-field-input" style="margin-bottom: 10px;")
        label(for='favoriteBook') Favorite book: 
        input#favoriteBook.form-control.input-field(type='text', placeholder='title of book' name='favoriteBook' tabindex=3)
        div.form-group(class="form-field-input" style="margin-bottom: 10px;")
        label(for='pw') Password: 
        input#pw.form-control.input-field(type='password' name='password' tabindex=4)
        div.form-group(class="form-field-input" style="margin-bottom: 10px;")
        label(for='pw2') Confirm password: 
        input#pw2.form-control.input-field(type='password' name='confirmPassword' style="margin-bottom: 10px;" tabindex=4)
        button.btn.button-primary(type='submit' tabindex=5) Sign up
0 голосов
/ 12 марта 2020

Скорее всего, это относится к списку допустимых доменов в файле манифеста вашего приложения. Вы используете App Studio? Если это так, в разделе «Домены и разрешения» необходимо указать конечную точку POST в качестве допустимого домена (только часть домена, а не полный URL-адрес).

Если вы не используете App Studio, или просто хотите узнать больше, см. здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...