ローカル ストレージまたはクエリ パラメーターを使用してダイアログ ボックスにデータを渡す

DialogApi 1.2 要件セットをサポートしていないプラットフォームまたはホストでアドインが実行されている場合、messageChild メソッドを使用してホスト ページからダイアログ ボックスにデータを送信することはできません。 代わりに、次のいずれかの方法を使用します。

  • ローカル ストレージ - ダイアログを開く前に、ホスト ページの window.localStorage にデータを書き込みます。 どちらのウィンドウも、同じドメイン (ポート番号を含む) を共有している場合、同じローカル ストレージにアクセスできます。
  • クエリ パラメーター - displayDialogAsyncに渡す URL にキーと値のペアを追加します。 ダイアログは、開いたときに値を読み取ります。

messageChildを使用して推奨される方法については、「ダイアログ ボックスに情報を渡す」を参照してください。

アプローチを選択する

考慮事項 ローカル ストレージ クエリ パラメーター
データ サイズ より大きなペイロードに適しています。 小さい値に最適です。
データの可用性 ダイアログが開いた後はいつでも使用できます。 ダイアログの読み込み時に URL で使用できます。

ヒント: ダイアログが開いたまま変数に値を保存して読み取ります。
ナビゲーション全体の永続化 明示的にクリアされるまで永続化されます。 ダイアログがリダイレクトされた場合に失われます。

ローカル ストレージの使用

次の例に示すように、displayDialogAsync呼び出しの前に、ホスト ページの window.localStorage オブジェクトの setItem メソッドを呼び出します。

localStorage.setItem("clientID", "15963ac5-314f-4d9b-b5a1-ccb2f1aea248");

ダイアログ ボックスのコードは、次の例に示すように、必要に応じて項目を読み取ります。

const clientID = localStorage.getItem("clientID");
// You can also use property syntax:
// const clientID = localStorage.clientID;

注:

ブラウザーのセキュリティの変更は、トークン処理の戦略に影響します。

  • アドインが Safari ブラウザーのOffice on the webで実行されている場合、ダイアログと作業ウィンドウは同じローカル ストレージを共有しないため、それらの間の通信に使用することはできません。
  • Chrome や Edge などの Chromium ベースのブラウザーのバージョン 115 以降では、ストレージパーティション分割を有効にして、特定のサイドチャネルクロスサイト追跡を防ぎます (「Microsoft Edge ブラウザー ポリシー」も参照)。 つまり、ローカル ストレージなどのストレージ API によって格納されたデータは、同じ配信元と同じトップレベル サイトを持つコンテキストでのみ使用できます。 可能であれば、「Office アドインで Office ダイアログ API を使用する」の説明に従って、messageParent メソッドと messageChild メソッドを使用して、ダイアログと作業ウィンドウの間でデータを渡すことをお勧めします。

クエリ パラメーターの使用

displayDialogAsyncに渡す URL にキーと値のペアを追加します。 この方法は、ダイアログが最初に開くときにのみ必要な小さな値に最適です。

Office.context.ui.displayDialogAsync('https://myAddinDomain/myDialog.html?clientID=15963ac5-314f-4d9b-b5a1-ccb2f1aea248');

この手法を使用するサンプルについては、「PowerPoint アドインで Microsoft Graph を使用した Excel グラフの挿入」を参照してください。

ダイアログ ボックス内のコードは、URL を解析し、パラメーター値を読み取ることができます。

重要

Office では、displayDialogAsyncに渡された URL に _host_info というクエリ パラメーターが自動的に追加されます。 このパラメーターは、カスタム クエリ パラメーター (存在する場合) の後に追加されます。 ダイアログ ボックスが移動する後続の URL に _host_info は追加されません。 Microsoft では、将来、この値の内容を変更したり、完全に削除したりする可能性があるため、コードで読み取るべきではありません。 Office は、ダイアログ ボックスのセッション ストレージ ( Window.sessionStorage プロパティ) に同じ値を追加します。 この場合も、コードではこの値に対する読み取りも書き込みも行わないでください

一般的な問題のトラブルシューティング

  • ダイアログでローカル ストレージが空の場合は、ホスト ページとダイアログでまったく同じ配信元が使用されていることを確認します。
  • クエリ パラメーターの値が見つからない場合は、 displayDialogAsyncに渡された初期 URL に存在することを確認します。
  • ダイアログ フローのリダイレクト後にデータが必要な場合は、クエリ パラメーターのみに依存するのではなく、ローカル ストレージまたはサーバーの状態を使用します。

関連項目