Lidar com erros e eventos na caixa de diálogo do Office

Este artigo descreve como interceptar e manipular erros ao abrir a caixa de diálogo e erros que ocorrem dentro da caixa de diálogo.

Observação

Este artigo pressupõe que você esteja familiarizado com os conceitos básicos do uso da API de caixa de diálogo do Office, conforme descrito em Usar a API de caixa de diálogo do Office em seus Suplementos do Office.

Confira também Práticas recomendadas e regras para a API de diálogo do Office.

Seu código deve lidar com duas categorias de eventos.

  • Erros retornados pela chamada de porque a caixa de displayDialogAsync diálogo não pode ser criada.
  • Erros e outros eventos na caixa de diálogo.

Erros de displayDialogAsync

Além dos erros gerais da plataforma e do sistema, quatro erros são específicos para chamar displayDialogAsync.

Número do código Significado
12004 O domínio da URL passada não displayDialogAsync é confiável. O domínio deve ser o mesmo domínio que o da página de host (incluindo o protocolo e o número de porta).

No Outlook na Web e no novo Outlook no Windows, esse erro ocorre quando um suplemento está hospedado em um servidor localhost e seu manifesto não especifica um elemento AppDomain para localhost.
12005 A URL passada para displayDialogAsync usa o protocolo HTTP. HTTPS é necessário. (Em algumas versões do Office, o texto da mensagem de erro retornado com 12005 é o mesmo retornado para 12004.)
12007 Uma caixa de diálogo já está aberta na janela do host. Uma janela do host, como um painel de tarefas, só pode ter uma caixa de diálogo aberta por vez.
12009 O usuário opta por ignorar a caixa de diálogo. Esse erro pode ocorrer no Office na Web, em que os usuários podem optar por não permitir que um suplemento apresente uma caixa de diálogo. Para obter mais informações, consulte Lidando com bloqueadores de pop-up com o Office na Web.
12011 O suplemento está em execução no Office na Web e a configuração do navegador do usuário está bloqueando pop-ups. Isso geralmente acontece quando o navegador é herdado do Edge (um modo de exibição da Web mais antigo e sem suporte) e o domínio do suplemento está em uma zona de segurança diferente do domínio que a caixa de diálogo está tentando abrir. Outro cenário que desencadeia esse erro é que o navegador é o Safari e está configurado para bloquear todos os pop-ups. Considere responder a esse erro solicitando que o usuário altere a configuração do navegador ou use um navegador diferente.

Quando displayDialogAsync é chamado, ele passa um objeto AsyncResult para sua função de retorno de chamada. Quando a chamada for bem-sucedida, a caixa de diálogo será aberta e a value propriedade do AsyncResult objeto será um objeto Dialog . Para obter um exemplo disso, consulte Enviar informações da caixa de diálogo para a página host. Quando a chamada para displayDialogAsync falha, a caixa de diálogo não é criada, a statusAsyncResult propriedade do objeto é definida como Office.AsyncResultStatus.Failede a error propriedade do objeto é preenchida. Você sempre deve fornecer um retorno de chamada que teste o e responda status quando for um erro. Para obter um exemplo que relata a mensagem de erro independentemente do número de código, consulte o código a seguir. (A showNotification função, não definida neste artigo, exibe ou registra o erro. Para obter um exemplo de como você pode implementar essa função em seu suplemento, consulte Exemplo de API de Caixa de Diálogo do Suplemento do Office.)

let dialog;
Office.context.ui.displayDialogAsync('https://myDomain/myDialog.html',
function (asyncResult) {
    if (asyncResult.status === Office.AsyncResultStatus.Failed) {
        showNotification(asyncResult.error.code = ": " + asyncResult.error.message);
    } else {
        dialog = asyncResult.value;
        dialog.addEventHandler(Office.EventType.DialogMessageReceived, processMessage);
    }
});

Erros e eventos na caixa de diálogo

Três erros e eventos na caixa de diálogo gerarão um DialogEventReceived evento na página do host. Para obter um lembrete do que é uma página host, consulte Abrir uma caixa de diálogo de uma página host.

Número do código Significado
12002 Uma destas opções:
  • Nenhuma página existe na URL que foi passada para .displayDialogAsync
  • A página que foi passada para displayDialogAsync carregada, mas a caixa de diálogo foi redirecionada para uma página que não consegue localizar ou carregar ou foi direcionada para uma URL com sintaxe inválida.
12003 A caixa de diálogo foi direcionada para uma URL com o protocolo HTTP. HTTPS é necessário.
12006 Uma das seguintes opções:
  • A caixa de diálogo foi fechada, geralmente porque o usuário escolheu o botão Fechar X.
  • A caixa de diálogo retornou um cabeçalho de resposta Cross-Origin-Opener-Policy: same-origin . Para evitar isso, você deve definir o cabeçalho Cross-Origin-Opener-Policy: unsafe-none ou configurar o suplemento e a caixa de diálogo para estarem no mesmo domínio que a página host.

Seu código pode atribuir um manipulador para o evento DialogEventReceived na chamada para displayDialogAsync. Apresentamos um exemplo simples a seguir.

let dialog;
Office.context.ui.displayDialogAsync('https://myDomain/myDialog.html',
    function (result) {
        dialog = result.value;
        dialog.addEventHandler(Office.EventType.DialogEventReceived, processDialogEvent);
    }
);

Para obter um exemplo de um manipulador para o DialogEventReceived evento que cria mensagens de erro personalizadas para cada código de erro, consulte o exemplo a seguir.

function processDialogEvent(arg) {
    switch (arg.error) {
        case 12002:
            showNotification("The dialog box has been directed to a page that it can't find or load, or the URL syntax is invalid.");
            break;
        case 12003:
            showNotification("The dialog box has been directed to a URL with the HTTP protocol. HTTPS is required.");            break;
        case 12006:
            showNotification("Dialog closed.");
            break;
        default:
            showNotification("Unknown error in dialog box.");
            break;
    }
}

Confira também

Para ver um suplemento de exemplo que manipula erros dessa forma, confira Exemplo de API de Caixa de diálogo do Suplemento do Office.