2017-03-14 14 views
3

ExcelアドインをExcel JavaScript APIで作成しています。このアドインにボタンがあり、それをクリックすると window.open("https://localhost:3000/#/new/", "popup", "width=1000, height=1100")が起動し、ブラウザウィンドウがポップアップします。Excelアドイン/ファイル/プログラムのイベントを閉じるか、オープナーがまだ生きているかを確認してください。

新しいページはangularjsによって作成されます。それは$window.opener.postMessage(msg, $window.opener.location.href)によってアドインオープナーにpostMessageを送ることができます。ここでは、ページにリアルタイムでflagを追加して、ページがオープナーアドインに接続されているかどうかを指定します。

たとえば、新しいページがポップアップすると、フラグはconnectedと表示されます。 Excelファイルを閉じると(たとえば、ExcelプログラムをWindowsで閉じる、Excelのオンラインでブラウザタブを閉じる)、通常はポップアップブラウザウィンドウがシステマティックに閉じないが、フラグをdisconnectedにしたい。

Excel JavaScript APIによってclose events of add-in/file/programがあるかどうかわかりません。その場合は、イベントがトリガーされたときに、アドインからポップアップブラウザウィンドウにpostMessageというメッセージを送信することができます。

それ以外の場合は、ポップアップブラウザウィンドウの横に、オープナーがまだ生きているかどうかを検出する効率的な方法はありますか?

答えて

0

$window.opener !== null 

かなり簡単で正しいと思われる(これまでのところ)。

その後、少なくとも、我々は開幕戦がまだ生きている場合は、ハートビートによって、例えばをチェックするパッシブ方法を使用することができ、または送信されたメッセージのノーリターンがない場合...

1

ポップアップを開いたままにしておきたい場合がありますか?または、ホストアドインが閉じられたときに自動的に閉じるようにしたいですか?後者を使用する場合は、Dialog APIを使用してください。

+0

ありがとうございましたDialog APIについて知っておくと良いです。 Excelアドインで 'Office.context.ui.displayDialogAsync( 'https://www.google.fr'、{height:1100、width:1000})'を使ってテストしました。アドインを非表示にしたり、Excelのタブを閉じたりすると、ダイアログが体系的に閉じられないようです。 – SoftTimur

0

通常のアンロードイベントが機能するはずです。あなたのコントローラに$ windowサービスを注入し、あなたのフラグを設定するためにonbeforeunloadを設定してください。

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

もう1つの方法は、ソケット経由で行われます。ソケットが通信を停止すると、接続が死んでいることがわかりますが、これはコストのかかる解決策です。単純なJSのアンロードがうまくいくはずです。

私はExcelのアドイン/ファイル/プログラムのクローズイベントを監視する方法を発見していないが、私はポップアップのオープナーがまだ生きているかどうかを検出する方法を発見した
+0

コントローラと '$ window'はポップアップブラウザウィンドウの横にありますが、質問はアドイン/ファイル/プログラムのクローズイベントを検出する方法です。現在のソケットは、ポップアップブラウザウィンドウとそのサーバーの間にあり、ポップアップウィンドウを起動するアドイン/エクセルファイルのクローズを検出しません。 – SoftTimur

関連する問題