[Office] ダイアログ ボックスでエラーとイベントを処理する
この記事では、ダイアログ ボックスを開くときにエラーをトラップして処理する方法と、ダイアログ ボックス内で発生するエラーについて説明します。
注:
この記事では、「Office アドインで Office ダイアログ API を使用する」で説明されているように、 Office ダイアログ API の使用の基本について理解していることを前提とします。
「Office ダイアログ API のベスト プラクティスとルール」も参照してください。
コードでは、2 つのカテゴリのイベントを処理する必要があります。
- ダイアログ ボックスを作成できないために
displayDialogAsync
の呼び出しによって返されるエラー。 - ダイアログ ボックスのエラー、およびその他のイベント。
displayDialogAsync のエラー
一般的なプラットフォーム エラーとシステム エラーに加えて、4 つのエラーは を呼び出 displayDialogAsync
すことに固有です。
コード番号 | 意味 |
---|---|
12004 | 渡された displayDialogAsync URL のドメインは信頼されていません。 ドメインは、ホスト ページと同じドメインにある必要があります (プロトコルとポート番号を含む)。 |
12005 | displayDialogAsync に渡される URL には HTTP プロトコルを使用します。 HTTPS が必要です。 (一部のバージョンの Office では、12005 で返されるエラー メッセージ テキストは、12004 で返されたものと同じです)。 |
12007 | ダイアログ ボックスは、このホスト ウィンドウで既に開いています。 作業ウィンドウなどのホスト ウィンドウで一度に開けるダイアログ ボックスは 1 つだけです。 |
12009 | ダイアログ ボックスを無視するようにユーザーが選択しました。 このエラーは、ユーザーがアドインにダイアログ ボックスの表示を許可しないことを選択できるOffice on the webで発生する可能性があります。 詳細については、「Office on the webでのポップアップ ブロックの処理」を参照してください。 |
12011 | アドインはOffice on the webで実行されており、ユーザーのブラウザー構成によってポップアップがブロックされています。 これは最も一般的に、ブラウザーが Edge レガシであり、アドインのドメインが、ダイアログを開こうとしているドメインとは異なるセキュリティ ゾーンにある場合に発生します。 このエラーをトリガーするもう 1 つのシナリオは、ブラウザーが Safari であり、すべてのポップアップをブロックするように構成されていることです。 ブラウザーの構成を変更するか、別のブラウザーを使用するようにユーザーにプロンプトを表示して、このエラーに対応することを検討してください。 |
が呼び出されると displayDialogAsync
、 AsyncResult オブジェクトがそのコールバック関数に渡されます。 呼び出しが成功すると、ダイアログ ボックスが開き value
、オブジェクトの AsyncResult
プロパティが Dialog オブジェクトになります。 この例については、「 ダイアログ ボックスからホスト ページに情報を送信する」を参照してください。 の displayDialogAsync
呼び出しが失敗すると、ダイアログ ボックスは作成されません。 status
オブジェクトの AsyncResult
プロパティは に Office.AsyncResultStatus.Failed
設定され、 error
オブジェクトのプロパティが設定されます。 をテスト status
し、エラーが発生したときに応答するコールバックを常に提供する必要があります。 コード番号に関係なくエラー メッセージを報告する例については、次のコードを参照してください。 (この記事で定義されていない関数は showNotification
、エラーを表示またはログに記録します。アドイン内でこの関数を実装する方法の例については、「 Office アドイン ダイアログ API の例」を参照してください)。
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);
}
});
ダイアログ ボックスのエラーとイベント
ダイアログ ボックスの 3 つのエラーとイベントによって、ホスト ページでイベントが発生 DialogEventReceived
します。 ホスト ページの内容のリマインダーについては、「ホスト ページ からダイアログ ボックスを開く」を参照してください。
コード番号 | 意味 |
---|---|
12002 | 以下のいずれか:
|
12003 | ダイアログ ボックスが HTTP プロトコルを使用している URL を指していました。 HTTPS が必要です。 |
12006 | 以下のいずれか:
|
コードで、呼び出し内の DialogEventReceived
イベントのハンドラーを displayDialogAsync
に割り当てることができます。 次に簡単な例を示します。
let dialog;
Office.context.ui.displayDialogAsync('https://myDomain/myDialog.html',
function (result) {
dialog = result.value;
dialog.addEventHandler(Office.EventType.DialogEventReceived, processDialogEvent);
}
);
各エラー コードのカスタム エラー メッセージを作成するイベントの DialogEventReceived
ハンドラーの例については、次の例を参照してください。
function processDialogEvent(arg) {
switch (arg.error) {
case 12002:
showNotification("The dialog box has been directed to a page that it cannot 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;
}
}
関連項目
この方法でエラーを処理するサンプル アドインについては、「Office アドイン ダイアログ API の例」を参照してください。
Office Add-ins