2017-03-10 10 views
1

私のウィンドウでExcel 2016(ビルド4266)のDialog APIで作成されたダイアログでwindow.close()を呼び出しています。しかし、ダイアログウィンドウは閉じません。同じコードがMac OfficeとExcelオンラインで動作します。これはバグですか?Windows Excelのaddinダイアログでwindow.close()が機能しない2016

+0

私はなぜそれがうまくいかないのか分かりませんが、それは次のようなダイアログを閉じる標準的な方法ではありません。ダイアログAPI一般に、ホストページからdialog.closeを呼び出す必要があります。詳細については、https://dev.office.com/docs/add-ins/develop/dialog-api-in-office-add-ins –

答えて

1

ご質問ありがとうございます。いいえ、バグではありません。 Rickyが述べたように、documentationに示すように、ホストページからdialog.closeを呼び出す必要があります。いくつかのプラットフォームで動作するという事実は、私たちがテストしたりサポートしているものではなく、偶然です。私たちはダイアログが閉じられる方法があるのは理にかなっていると思いますが、実装するかどうかは、汎用window.closeではなく、office.jsのAPIの一部になります。

もう少し拡張すると、window.closeが機能しないのは、ダイアログが単なる標準のブラウザウィンドウではないことです。プラットフォームとモードに応じて、さまざまな構文を使用してダイアログが表示されます。たとえば、Win32では、API displayAsIframeフラグで設定したモードに応じて、Office Online上にwebviewが埋め込まれたウィンドウダイアログが表示されます。新しいウィンドウかIframeを持つフローティングdivです。ダイアログを閉じるためにwindow.closeをキャプチャ/オーバーライドすることはできますが、他のウィンドウメソッドが機能しないため、混乱を招く可能性があります。したがって、一日の終わりには、ダイアログは、ライフサイクルがoffice.jsが提供するプラットフォーム/ APIによって制御されるオブジェクトであり、一般的なブラウザウィンドウではありません。表示するページは、office.jsをロードしてそこに含まれているAPIを呼び出す必要があります。 window.closeをオーバーライドする場合でも、オーバーライドを有効にするにはjavascriptを読み込む必要があります。だから要約すると、私たちのAPIを呼び出すためにあなたのページにoffice.jsをロードする必要があります。ダイアログを閉じるには、今日は親から行う必要があります。将来、ダイアログ自体で呼び出すことができる明示的なcloseメソッドを提供したいと考えています。

+0

返信いただきありがとうございますHumberto。私のケースでは、ダイアログはかなり独立したページであり、office.jsを読み込むことさえありません。それは私たちのサーバーにいくつかのものを保存し、私は作業が完了した後にユーザーのためのクローズボタンを持っている。これは、ダイアログを使用するのは非常に一般的なケースではありませんか? –

+1

私はその根拠を拡張するために私の答えを編集しました。乾杯 –

1

これをお寄せいただき、ありがとうございました。これは良い内部会話を開始しました。個人的には、window.closeが期待通りに動作するようにする必要があると思います。特に、プラットフォームの2/3ですでに行われているように思えます。

Humbertoの答えに対するコメント:Office.jsを使用せずにこれを動作させる方法 - 私たちができるかどうかは物理的には分かりません。閉じようとしているページにOffice.jsの参照が必要になると思います。それ以外の場合は、ウィンドウをmonkeypatchする方法を想像できません。論理を閉じます。でも、これを持っていただきありがとうございます。私たちはそれについて考えていきます...

+0

こんにちは、これで私を助けることができますか? http://stackoverflow.com/questions/42950678/word-add-in-stops-working-after-dialog-close-is-fired-office-js –

関連する問題