Utiliser l’API de boîte de dialogue Office dans les compléments Office
Utilisez l’API de boîte de dialogue Office pour ouvrir des boîtes de dialogue dans votre complément Office. Cet article fournit des conseils concernant l’utilisation de l’API de dialogue dans votre complément Office. Envisagez d’ouvrir une boîte de dialogue à partir d’un volet Office, d’un complément de contenu ou d’une commande de complément pour effectuer les opérations suivantes :
- Connectez un utilisateur avec une ressource telle que Google, Facebook ou Identité Microsoft. Pour plus d’informations, consultez s’authentifier avec l’API de boîte de dialogue Office.
- fournir davantage d’espace à l’écran, ou même un plein écran, pour certaines tâches exécutées dans votre complément ;
- héberger une vidéo qui serait trop petite si elle était limitée à un volet Office.
Conseil
Comme des éléments d’interface utilisateur qui se chevauchent peuvent gêner des utilisateurs, évitez d’ouvrir une boîte de dialogue à partir d’un volet Office à moins que votre scénario l’exige. Lorsque vous envisagez d’utiliser la surface d’exposition d’un volet Office, tenez compte du fait que les volets Office peuvent être affichés sous forme d’onglets. Pour obtenir un exemple de volet Office à onglets, consultez l’exemple De complément Excel JavaScript SalesTracker .
L’image suivante montre un exemple de boîte de dialogue.
La boîte de dialogue s’ouvre toujours au centre de l’écran. L’utilisateur peut la déplacer et la redimensionner. La fenêtre n’est pas modifiée : un utilisateur peut continuer à interagir avec le document dans l’application Office et avec la page dans le volet Office, le cas échéant.
Remarque
Si vous développez un complément qui s’exécute dans Office sur le Web ou outlook sur Windows et qu’il nécessite l’accès aux fonctionnalités d’appareil d’un utilisateur, consultez l’API d’autorisation d’appareil pour savoir comment demander des autorisations à l’utilisateur. Les fonctionnalités de l’appareil incluent la caméra, la géolocalisation et le microphone d’un utilisateur.
Ouvrir une boîte de dialogue à partir d’une page hôte
Les API JavaScript Office incluent un objet Dialog et deux fonctions dans l’espace de noms Office.context.ui.
Pour ouvrir une boîte de dialogue, généralement une page dans un volet des tâches, votre code appelle la méthode displayDialogAsync et lui transmet l’URL de la ressource que vous voulez ouvrir. La page sur laquelle cette méthode est appelée est connue sous le nom de « page hôte ». Par exemple, si vous appelez cette méthode dans le script sur index.html d'un volet de tâches, la page index.html correspond à la page hôte de la boîte de dialogue ouverte par la méthode.
La ressource ouverte dans la boîte de dialogue correspond généralement à une page, mais ce peut être une méthode du contrôleur dans une application MVC, un itinéraire, une méthode de service web ou toute autre ressource. Dans cet article, les termes « page » ou « site web » font référence à la ressource dans la boîte de dialogue. Le code suivant est un exemple simple.
Office.context.ui.displayDialogAsync('https://www.contoso.com/myDialog.html');
- L’URL utilise le protocole HTTPS. Ceci est obligatoire pour toutes les pages chargées dans une boîte de dialogue, pas seulement la première page chargée.
- Le domaine de la boîte de dialogue est le même que celui de la page hôte, qui peut être la page d’un volet Office ou le fichier de fonctions d’une commande de complément. Il est nécessaire que la page, la méthode de contrôleur ou toute autre ressource transmise à la
displayDialogAsync
méthode se trouve dans le même domaine que la page hôte.
Importante
La page hôte et les ressources s'ouvrant dans la boîte de dialogue doivent avoir le même domaine complet. Si vous tentez de passer displayDialogAsync
un sous-domaine du domaine du complément, cela ne fonctionnera pas. Le domaine complet et tous les sous-domaines doivent être exactement les mêmes.
Une fois que la première page (ou toute autre ressource) est chargée, un utilisateur peut utiliser des liens ou une autre interface utilisateur pour accéder à n’importe quel site web (ou n’importe quelle autre ressource) qui utilise le protocole HTTPS. Vous pouvez également concevoir la première page de façon à ce que l’utilisateur soit immédiatement redirigé vers un autre site.
Par défaut, la boîte de dialogue occupera 80 % de la hauteur et de la largeur de l’écran de l’appareil, mais vous pouvez définir des pourcentages différents en transmettant un objet de configuration à la méthode, comme indiqué dans l’exemple suivant.
Office.context.ui.displayDialogAsync('https://www.contoso.com/myDialog.html', { height: 30, width: 20 });
Pour obtenir un exemple de complément qui effectue cette opération, voir Créer des compléments Office pour Excel. Pour plus d’exemples qui utilisent displayDialogAsync
, consultez Exemples de code.
Définissez les deux valeurs sur 100 % pour bénéficier d’une réelle d’expérience de plein écran. La valeur maximale effective est de 99,5 %, et la fenêtre est toujours déplaçable et redimensionnable.
Vous ne pouvez ouvrir qu’une seule boîte de dialogue à partir d’une fenêtre hôte. Toute tentative d’ouverture d’une autre boîte de dialogue génère une erreur. Par exemple, si un utilisateur ouvre une boîte de dialogue à partir d’un volet Office, il ne peut pas ouvrir une deuxième boîte de dialogue à partir d’une autre page dans le volet Office. Toutefois, quand une boîte de dialogue est ouverte à partir d’une commande de complément, la commande ouvre un nouveau fichier HTML (mais invisible) chaque fois qu’elle est sélectionnée. Cela crée une nouvelle fenêtre hôte (invisible), afin que chaque fenêtre de ce type puisse lancer sa propre boîte de dialogue. Pour plus d’informations, reportez-vous à Erreurs provenant de displayDialogAsync.
Tirer parti d’une option de performances dans Office sur le web
La propriété displayInIframe
est une propriété supplémentaire dans l’objet de configuration que vous pouvez transmettre à displayDialogAsync
. Lorsque cette propriété est définie sur true
et que le complément est en cours d’exécution dans un document ouvert dans Office sur le web, la boîte de dialogue s’ouvre sous la forme d’un iframe flottant et non d’une fenêtre indépendante ; elle s’ouvre ainsi plus rapidement. Voici un exemple.
Office.context.ui.displayDialogAsync('https://www.contoso.com/myDialog.html', { height: 30, width: 20, displayInIframe: true });
La valeur par défaut est false
, ce qui revient à omettre entièrement la propriété. Si le complément n’est pas en cours d’exécution dans Office sur le Web, le displayInIframe
est ignoré.
Remarque
Vous ne devez pas utiliser displayInIframe: true
si la boîte de dialogue redirige à tout moment vers une page qui ne peut pas être ouverte dans un iframe. Par exemple, les pages de connexion de nombreux services web populaires, tels que google et compte Microsoft, ne peuvent pas être ouvertes dans un iframe.
Envoi d’informations à la page hôte à partir de la boîte de dialogue
Le code dans la boîte de dialogue utilise la fonction messageParent pour envoyer un message de chaîne à la page hôte. La chaîne peut être un mot, une phrase, un objet blob XML, un JSON stringifié ou tout autre élément qui peut être sérialisé en chaîne ou converti en chaîne. Pour utiliser la messageParent
méthode , la boîte de dialogue doit d’abord initialiser l’API JavaScript Office.
Remarque
Pour plus de clarté, dans cette section, nous appelons le message cible la page hôte, mais strictement, les messages sont envoyés au runtime dans le volet Office (ou au runtime qui héberge un fichier de fonction). La distinction n’est significative que dans le cas de la messagerie inter-domaines. Pour plus d’informations, consultez Messagerie inter-domaines au runtime hôte.
L’exemple suivant montre comment initialiser Office JS et envoyer un message à la page hôte.
Office.onReady(() => {
// Add any initialization code for your dialog here.
});
// Called when dialog signs in the user.
function userSignedIn() {
Office.context.ui.messageParent(true.toString());
}
L’exemple suivant montre comment retourner une chaîne JSON contenant des informations de profil.
function userProfileSignedIn(profile) {
const profileMessage = {
"name": profile.name,
"email": profile.email,
};
Office.context.ui.messageParent(JSON.stringify(profileMessage));
}
La messageParent
fonction est l’une des deux SEULES API JS Office qui peuvent être appelées dans la boîte de dialogue. L’autre API JS qui peut être appelée dans la boîte de dialogue est Office.context.requirements.isSetSupported
. Pour plus d’informations à ce sujet, voir Spécifier les applications Office et les exigences d’API. Toutefois, dans la boîte de dialogue, cette API n’est pas prise en charge dans les Outlook 2016 perpétuels sous licence en volume (autrement dit, la version MSI).
La page hôte doit être configurée de façon à recevoir le message. Pour ce faire, ajoutez un paramètre de rappel à l’appel d’origine de displayDialogAsync
. Le rappel attribue un gestionnaire à l’événement DialogMessageReceived
. Voici un exemple.
let dialog; // Declare dialog as global for use in later functions.
Office.context.ui.displayDialogAsync('https://www.contoso.com/myDialog.html', { height: 30, width: 20 },
(asyncResult) => {
dialog = asyncResult.value;
dialog.addEventHandler(Office.EventType.DialogMessageReceived, processMessage);
}
);
Office transmet un objet AsyncResult au rappel. Il représente le résultat de la tentative d’ouverture de la boîte de dialogue. Il ne représente pas le résultat de tous les événements dans la boîte de dialogue. Pour plus d’informations sur cette distinction, consultez la Gestion des erreurs et des événements.
- La propriété
value
deasyncResult
est définie sur un objet Dialog, qui existe dans la page hôte, pas dans le contexte d’exécution de la boîte de dialogue. -
processMessage
est la fonction qui gère l’événement. Vous pouvez lui donner le nom que vous souhaitez. - La variable
dialog
est déclarée avec une portée plus large que le rappel, car elle est également référencée dansprocessMessage
.
Voici un exemple simple de gestionnaire pour l’événement DialogMessageReceived
.
function processMessage(arg) {
const messageFromDialog = JSON.parse(arg.message);
showUserName(messageFromDialog.name);
}
Office transmet l’objet arg
au gestionnaire. Sa message
propriété est la chaîne envoyée par l’appel de dans messageParent
la boîte de dialogue. Dans cet exemple, il s’agit d’une représentation stringifiée du profil d’un utilisateur à partir d’un service, tel que un compte Microsoft ou Google, de sorte qu’elle est désérialisée en objet avec JSON.parse
. L’implémentation showUserName
n’est pas affichée. Elle peut afficher un message de bienvenue personnalisé dans le volet Office.
Lorsque l’intervention de l’utilisateur sur la boîte de dialogue est terminée, votre gestionnaire de messages doit fermer la boîte de dialogue, comme indiqué dans cet exemple.
function processMessage(arg) {
dialog.close();
// Add code to process the message here.
}
L’objet dialog
doit être le même que celui renvoyé par l’appel de displayDialogAsync
. Vous devez déclarer l’objet dialog
en tant que variable globale. Vous pouvez également limiter l’objet dialog
à l’appel displayDialogAsync
avec une fonction de rappel anonyme, comme illustré dans l’exemple suivant. Dans l’exemple, processMessage
n’a pas besoin de fermer le dialogue, car la close
méthode est appelée dans la fonction de rappel anonyme.
Office.context.ui.displayDialogAsync('https://www.contoso.com/myDialog.html', { height: 30, width: 20 },
(asyncResult) => {
const dialog = asyncResult.value;
dialog.addEventHandler(Office.EventType.DialogMessageReceived, (arg) => {
dialog.close();
processMessage(arg);
});
}
);
Si le complément a besoin d’ouvrir une autre page du volet Office après avoir reçu le message, vous pouvez utiliser la méthode window.location.replace
(ou window.location.href
) en tant que dernière ligne du gestionnaire. Voici un exemple.
function processMessage(arg) {
// Add code to process the message here.
window.location.replace("/newPage.html");
// Alternatively, use the following:
// window.location.href = "/newPage.html";
}
Pour voir un exemple de complément qui effectue ce type d’action, consultez l’article relatif à l’exemple Insérer des graphiques Excel à l’aide de Microsoft Graph dans un complément PowerPoint.
Messagerie conditionnelle
Étant donné que vous pouvez envoyer plusieurs appels messageParent
à partir de la boîte de dialogue, mais que vous n’avez qu’un seul gestionnaire dans la page hôte pour l’événement DialogMessageReceived
, le gestionnaire doit utiliser la logique conditionnelle pour distinguer les différents messages. Par exemple, si la boîte de dialogue invite un utilisateur à se connecter à un fournisseur d’identité tel qu’un compte Microsoft ou Google, elle envoie le profil de l’utilisateur sous forme de message. Si l’authentification échoue, la boîte de dialogue envoie des informations d’erreur à la page hôte, comme dans l’exemple suivant.
if (loginSuccess) {
const userProfile = getProfile();
const messageObject = { messageType: "signinSuccess", profile: userProfile };
const jsonMessage = JSON.stringify(messageObject);
Office.context.ui.messageParent(jsonMessage);
} else {
const errorDetails = getError();
const messageObject = { messageType: "signinFailure", error: errorDetails };
const jsonMessage = JSON.stringify(messageObject);
Office.context.ui.messageParent(jsonMessage);
}
À propos de l’exemple précédent, notez :
- La variable
loginSuccess
serait initialisée en lisant la réponse HTTP à partir du fournisseur d’identité. - L’implémentation des
getProfile
fonctions etgetError
n’est pas affichée. Chacune obtient des données à partir d’un paramètre de requête ou du corps de la réponse HTTP. - Des objets anonymes de différents types sont envoyés selon que la connexion a réussi ou non. Tous deux ont une propriété
messageType
, mais un a une propriétéprofile
et l’autre une propriétéerror
.
Le code du gestionnaire dans la page hôte utilise la valeur de la propriété messageType
pour créer une branche comme le montre l’exemple suivant. Notez que la fonction showUserName
est identique à celle de l’exemple précédent et que la fonction showNotification
affiche l’erreur dans l’interface utilisateur de la page hôte.
function processMessage(arg) {
const messageFromDialog = JSON.parse(arg.message);
if (messageFromDialog.messageType === "signinSuccess") {
dialog.close();
showUserName(messageFromDialog.profile.name);
window.location.replace("/newPage.html");
} else {
dialog.close();
showNotification("Unable to authenticate user: " + messageFromDialog.error);
}
}
L’implémentation showNotification
n’est pas affichée. Il peut afficher status dans une barre de notification du volet Office.
Messagerie inter-domaines vers le runtime hôte
Une fois la boîte de dialogue ouverte, la boîte de dialogue ou le runtime parent peut s’éloigner du domaine du complément. Si l’une de ces choses se produit, un appel de messageParent
échoue, sauf si votre code spécifie le domaine du runtime parent. Pour ce faire, ajoutez un paramètre DialogMessageOptions à l’appel de messageParent
. Cet objet a une targetOrigin
propriété qui spécifie le domaine auquel le message doit être envoyé. Si le paramètre n’est pas utilisé, Office suppose que la cible est le même domaine que celui que la boîte de dialogue héberge actuellement.
Remarque
L’utilisation messageParent
de pour envoyer un message inter-domaines nécessite l’ensemble de conditions requises Dialog Origin 1.1. Le DialogMessageOptions
paramètre est ignoré sur les versions antérieures d’Office qui ne prennent pas en charge l’ensemble de conditions requises, de sorte que le comportement de la méthode n’est pas affecté si vous la transmettez.
Voici un exemple d’utilisation messageParent
de pour envoyer un message inter-domaines.
Office.context.ui.messageParent("Some message", { targetOrigin: "https://resource.contoso.com" });
Si le message n’inclut pas de données sensibles, vous pouvez définir sur targetOrigin
« * », ce qui permet d’être envoyé à n’importe quel domaine. Voici un exemple.
Office.context.ui.messageParent("Some message", { targetOrigin: "*" });
Conseil
Le
DialogMessageOptions
paramètre a été ajouté à lamessageParent
méthode en tant que paramètre obligatoire à la mi-2021. Les compléments plus anciens qui envoient un message inter-domaines avec la méthode ne fonctionnent plus tant qu’ils n’ont pas été mis à jour pour utiliser le nouveau paramètre. Tant que le complément n’est pas mis à jour, dans Office sur Windows uniquement, les utilisateurs et les administrateurs système peuvent permettre à ces compléments de continuer à fonctionner en spécifiant les domaines approuvés avec un paramètre de Registre : HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\WEF\AllowedDialogCommunicationDomains. Pour ce faire, créez un fichier avec une.reg
extension, enregistrez-le sur l’ordinateur Windows, puis double-cliquez dessus pour l’exécuter. Voici un exemple du contenu d’un tel fichier.Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\WEF\AllowedDialogCommunicationDomains] "My trusted domain"="https://www.contoso.com" "Another trusted domain"="https://fabrikam.com"
Dans Office sur le Web et outlook sur Windows, si le domaine de votre boîte de dialogue est différent de celui de votre complément et qu’il applique l’en-tête de réponse Cross-Origin-Opener-Policy : same-origin, votre complément sera bloqué pour accéder aux messages à partir de la boîte de dialogue et l’erreur 12006 s’affichera pour vos utilisateurs. Pour éviter cela, vous devez définir l’en-tête
Cross-Origin-Opener-Policy: unsafe-none
sur ou configurer votre complément et votre boîte de dialogue pour qu’il se trouve dans le même domaine.
Transmission d’informations à la boîte de dialogue
Votre complément peut envoyer des messages de la page hôte à une boîte de dialogue à l’aide de Dialog.messageChild.
Utiliser messageChild()
à partir de la page hôte
Lorsque vous appelez l’API de boîte de dialogue Office pour ouvrir une boîte de dialogue, un objet Dialog est retourné. Il doit être affecté à une variable dont l’étendue est globale afin que vous puissiez la référencer à partir d’autres fonctions. Voici un exemple.
let dialog; // Declare as global variable.
Office.context.ui.displayDialogAsync('https://www.contoso.com/myDialog.html',
(asyncResult) => {
dialog = asyncResult.value;
dialog.addEventHandler(Office.EventType.DialogMessageReceived, processMessage);
}
);
function processMessage(arg) {
dialog.close();
// Add code to process the message here.
}
Cet Dialog
objet a une méthode messageChild qui envoie toute chaîne, y compris les données stringifiées, à la boîte de dialogue. Cela déclenche un DialogParentMessageReceived
événement dans la boîte de dialogue. Votre code doit gérer cet événement, comme indiqué dans la section suivante.
Imaginez un scénario dans lequel l’interface utilisateur de la boîte de dialogue est liée à la feuille de calcul Excel actuellement active et à la position de cette feuille de calcul par rapport aux autres feuilles de calcul. Dans l’exemple suivant, worksheetPropertiesChanged
envoie les propriétés de la feuille de calcul active à la boîte de dialogue. Les données sont stringifiées afin qu’elles puissent être passées à messageChild
.
await Excel.run(async (context) => {
const worksheet = context.workbook.worksheets.getActiveWorksheet();
worksheet.load();
await context.sync();
worksheetPropertiesChanged(worksheet);
});
...
function worksheetPropertiesChanged(currentWorksheet) {
const messageToDialog = JSON.stringify(currentWorksheet);
dialog.messageChild(messageToDialog);
}
Gérer DialogParentMessageReceived dans la boîte de dialogue
Dans le code JavaScript de la boîte de dialogue, inscrivez un gestionnaire pour l’événement DialogParentMessageReceived
avec la méthode UI.addHandlerAsync . Cette opération est généralement effectuée dans la fonction Office.onReady ou Office.initialize, comme indiqué ci-dessous. (Un exemple plus robuste est inclus plus loin dans cet article.)
Office.onReady(() => {
Office.context.ui.addHandlerAsync(Office.EventType.DialogParentMessageReceived,onMessageFromParent);
});
Ensuite, définissez le onMessageFromParent
gestionnaire. Le code suivant poursuit l’exemple de la section précédente. Notez qu’Office transmet un argument au gestionnaire et que la message
propriété de l’objet argument contient la chaîne de la page hôte. Dans cet exemple, le message est reconverti en objet et jQuery est utilisé pour définir le titre supérieur de la boîte de dialogue pour qu’il corresponde au nouveau nom de feuille de calcul.
function onMessageFromParent(arg) {
const messageFromParent = JSON.parse(arg.message);
document.querySelector('h1').textContent = messageFromParent.name;
}
Il est recommandé de vérifier que votre gestionnaire est correctement inscrit. Pour ce faire, passez un rappel à la addHandlerAsync
méthode . Cette opération s’exécute lorsque la tentative d’inscription du gestionnaire est terminée. Utilisez le gestionnaire pour journaliser ou afficher une erreur si le gestionnaire n’a pas été correctement inscrit. Voici un exemple. Notez que reportError
est une fonction, non définie ici, qui journalise ou affiche l’erreur.
Office.onReady(() => {
Office.context.ui.addHandlerAsync(
Office.EventType.DialogParentMessageReceived,
onMessageFromParent,
onRegisterMessageComplete
);
});
function onRegisterMessageComplete(asyncResult) {
if (asyncResult.status !== Office.AsyncResultStatus.Succeeded) {
reportError(asyncResult.error.message);
}
}
Messagerie conditionnelle de la page parente vers la boîte de dialogue
Étant donné que vous pouvez effectuer plusieurs messageChild
appels à partir de la page hôte, mais que vous n’avez qu’un seul gestionnaire dans la boîte de dialogue pour l’événement DialogParentMessageReceived
, le gestionnaire doit utiliser la logique conditionnelle pour distinguer les différents messages. Vous pouvez le faire d’une manière qui est précisément parallèle à la façon dont vous structurez la messagerie conditionnelle lorsque la boîte de dialogue envoie un message à la page hôte, comme décrit dans Messagerie conditionnelle.
Remarque
Dans certains cas, l’API messageChild
, qui fait partie de l’ensemble de conditions requises DialogApi 1.2, peut ne pas être prise en charge. Par exemple, messageChild
n’est pas pris en charge dans les Outlook 2016 perpétuels sous licence en volume et dans Outlook 2019 perpétuel sous licence en volume. D’autres méthodes de messagerie parent-à-boîte de dialogue sont décrites dans Autres façons de transmettre des messages à une boîte de dialogue à partir de sa page hôte.
Importante
L’ensemble de conditions requises DialogApi 1.2 ne peut pas être spécifié dans la <section Exigences> d’un manifeste de complément. Vous devrez case activée pour la prise en charge de DialogApi 1.2 lors de l’exécution à l’aide de la isSetSupported
méthode décrite dans Vérifications de l’exécution pour la prise en charge de la méthode et de l’ensemble de conditions requises. La prise en charge des exigences de manifeste est en cours de développement.
Messagerie inter-domaines vers le runtime de dialogue
Une fois la boîte de dialogue ouverte, la boîte de dialogue ou le runtime parent peut s’éloigner du domaine du complément. Si l’une de ces choses se produit, les appels à messageChild
échouent, sauf si votre code spécifie le domaine du runtime de la boîte de dialogue. Pour ce faire, ajoutez un paramètre DialogMessageOptions à l’appel de messageChild
. Cet objet a une targetOrigin
propriété qui spécifie le domaine auquel le message doit être envoyé. Si le paramètre n’est pas utilisé, Office suppose que la cible est le même domaine que celui que le runtime parent héberge actuellement.
Remarque
L’utilisation messageChild
de pour envoyer un message inter-domaines nécessite l’ensemble de conditions requises Dialog Origin 1.1. Le DialogMessageOptions
paramètre est ignoré sur les versions antérieures d’Office qui ne prennent pas en charge l’ensemble de conditions requises, de sorte que le comportement de la méthode n’est pas affecté si vous la transmettez.
Voici un exemple d’utilisation messageChild
de pour envoyer un message inter-domaines.
dialog.messageChild(messageToDialog, { targetOrigin: "https://resource.contoso.com" });
Si le message n’inclut pas de données sensibles, vous pouvez définir sur targetOrigin
« * », ce qui permet d’être envoyé à n’importe quel domaine. Voici un exemple.
dialog.messageChild(messageToDialog, { targetOrigin: "*" });
Étant donné que le runtime qui héberge la boîte de dialogue ne peut pas accéder à la <section AppDomains> du manifeste et ainsi déterminer si le domaine d’où provient le message est approuvé, vous devez utiliser le DialogParentMessageReceived
gestionnaire pour le déterminer. L’objet passé au gestionnaire contient le domaine actuellement hébergé dans le parent en tant que origin
propriété . Voici un exemple d’utilisation de la propriété .
function onMessageFromParent(arg) {
if (arg.origin === "https://addin.fabrikam.com") {
// Process the message.
} else {
// Signal the parent page to close the dialog.
const messageObject = { messageType: "untrustedDomain" };
Office.context.ui.messageParent(messageObject);
}
}
Par exemple, votre code peut utiliser la fonction Office.onReady ou Office.initialize pour stocker un tableau de domaines approuvés dans une variable globale. La arg.origin
propriété peut ensuite être vérifiée par rapport à cette liste dans le gestionnaire.
Conseil
Le DialogMessageOptions
paramètre a été ajouté à la messageChild
méthode en tant que paramètre obligatoire à la mi-2021. Les compléments plus anciens qui envoient un message inter-domaines avec la méthode ne fonctionnent plus tant qu’ils n’ont pas été mis à jour pour utiliser le nouveau paramètre. Tant que le complément n’est pas mis à jour, dans Office sur Windows uniquement, les utilisateurs et les administrateurs système peuvent permettre à ces compléments de continuer à fonctionner en spécifiant les domaines approuvés avec un paramètre de Registre : HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\WEF\AllowedDialogCommunicationDomains. Pour ce faire, créez un fichier avec une .reg
extension, enregistrez-le sur l’ordinateur Windows, puis double-cliquez dessus pour l’exécuter. Voici un exemple du contenu d’un tel fichier.
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\WEF\AllowedDialogCommunicationDomains]
"My trusted domain"="https://www.contoso.com"
"Another trusted domain"="https://fabrikam.com"
Fermer la boîte de dialogue
Vous pouvez implémenter un bouton de fermeture dans la boîte de dialogue. Pour ce faire, le gestionnaire d'événements Click du bouton doit utiliser messageParent
pour indiquer à la page hôte que vous avez cliqué sur le bouton. Voici un exemple.
function closeButtonClick() {
const messageObject = { messageType: "dialogClosed" };
const jsonMessage = JSON.stringify(messageObject);
Office.context.ui.messageParent(jsonMessage);
}
Le gestionnaire de la page hôte pour DialogMessageReceived
appelle dialog.close
, comme dans cet exemple. (consultez les exemples précédents qui montrent comment l’objet dialog
est initialisé).
function processMessage(arg) {
const messageFromDialog = JSON.parse(arg.message);
if (messageFromDialog.messageType === "dialogClosed") {
dialog.close();
}
}
Même lorsque vous ne disposez pas de votre propre interface utilisateur de fermeture de boîte de dialogue, un utilisateur final peut fermer la boîte de dialogue en choisissant le X dans le coin supérieur droit. Cette action déclenche l’événement DialogEventReceived
. Si votre volet hôte a besoin de savoir quand cela se produit, il doit déclarer un gestionnaire pour cet événement. Pour plus d’informations, consultez la section Erreurs et événements dans la boîte de dialogue.
Exemples de code
Tous les exemples suivants utilisent displayDialogAsync
. Certains ont des serveurs basés sur NodeJS et d’autres ont des serveurs ASP.NET/IIS-based, mais la logique d’utilisation de la méthode est la même, quelle que soit la façon dont le complément est implémenté côté serveur.
- Contenu de formation / Création de compléments
- Complément Office Microsoft Graph ASPNET
- Complément Office Microsoft Graph React
- SSO NodeJS pour complément Office
- Authentification unique ASPNET du complément Office
- Exemple de monétisation SAAS de complément Office
- Complément Outlook Microsoft Graph ASPNET
- Authentification unique de complément Outlook
- Visionneuse de jetons de complément Outlook
- Message actionnable du complément Outlook
- Partage de complément Outlook sur OneDrive
- Complément PowerPoint Microsoft Graph ASPNET InsertChart
- Scénario d’exécution partagé Excel
Voir aussi
- Ensembles de conditions requises de l’API de boîte de dialogue
- Pratiques recommandées et règles pour l’API de dialogue Office
- S’authentifier avec l’API de boîte de dialogue Office
- Utiliser la boîte de dialogue Office pour afficher une vidéo
- Gestion des erreurs et des événements dans la boîte de dialogue Office
- Temps d'exécution dans les compléments Office