2017-03-14 3 views
3

Je crée un complément Excel par Excel JavaScript API. Il y a un bouton dans ce complément, en cliquant dessus, il lance window.open("https://localhost:3000/#/new/", "popup", "width=1000, height=1100") et affiche une fenêtre de navigateur. La nouvelle page est construite par angularjs. Il peut envoyer postMessage à l'ouvreur de complément par $window.opener.postMessage(msg, $window.opener.location.href). Maintenant, je veux ajouter un flag en temps réel à la page pour spécifier si la page est connectée à son complément ouvreur.Fermer l'événement du complément/fichier/programme Excel ou vérifier si l'ouvre est encore en vie

Par exemple, lorsque la nouvelle page s'affiche, l'indicateur affiche connected. Si nous fermons le fichier Excel (par exemple, fermez le programme Excel dans Windows, fermez l'onglet du navigateur dans Excel en ligne), normalement la fenêtre du navigateur contextuel ne se ferme pas systématiquement, mais nous voulons que le drapeau affiche disconnected.

Est-ce que quelqu'un sait s'il y a close events of add-in/file/program par Excel JavaScript API. Si c'est le cas, nous pourrions envoyer un message par postMessage du complément à la fenêtre du navigateur contextuel lorsque l'événement est déclenché.

Sinon, du côté de la fenêtre du navigateur contextuel, quel serait un moyen efficace de détecter si son ouvre est encore en vie?

Répondre

0

Je n'ai pas trouvé comment écouter un événement près d'add-in Excel/fichier/programme, mais je l'ai trouvé comment détecter si l'ouverture de la fenêtre est encore en vie:

$window.opener !== null 

qui est assez facile et semble correct (jusqu'à présent).

Ensuite, au moins, nous pourrions utiliser un passif moyen de vérifier si l'ouvreur est encore en vie, par exemple, par un battement de coeur, ou quand il n'y a pas de retour d'un message envoyé ...

1

Est-ce que le veut le popup pour rester ouvert (et dire déconnecté) parfois? Ou préféreriez-vous qu'il se ferme automatiquement lorsque le complément d'hôte se ferme? Si vous voulez ce dernier, utilisez le Dialog API.

+0

Merci , il est bon de connaître l'API Dialog. Je viens de faire un test avec 'Office.context.ui.displayDialogAsync ('https://www.google.fr', {height: 1100, width: 1000})' dans un addin Excel. Il semble que cacher le complément ou fermer l'onglet Excel (dans Excel en ligne) ne ferme pas systématiquement le dialogue. – SoftTimur

0

J'ai l'impression que l'événement de déchargement normal devrait fonctionner. alors injectez le service $ window sur votre contrôleur et réglez le paramètre onbeforeunload pour définir votre drapeau.

app.controller("MyFlagChangerController", function ($scope, $window...)){ 
    $window.onbeforeunload = function (event) { 
    // Set flag 
    } 
}); 

Une autre façon de faire serait de passer par les sockets. Quand le socket arrête de communiquer, vous savez que la connexion est morte, c'est une solution plus coûteuse, et je suppose que le simple déchargement de JS devrait fonctionner.

+0

Le contrôleur et '$ window' se trouvent sur le côté de la fenêtre du navigateur contextuel, mais la question est de savoir comment détecter les événements de fermeture de l'add-in/fichier/programme. La socket actuelle se trouve entre la fenêtre du navigateur contextuel et son serveur, elle ne détectera pas la fermeture du fichier add-in/excel qui lance la fenêtre contextuelle. – SoftTimur