window.top を使用しないでください
カテゴリ: サポート可能性、アップグレードの準備、オンライン移行
影響の可能性: 高い
現象
次のスクリプト エラーがユーザーに表示されるか、またはエラー ログに含まれます:
Error: Blocked a frame with origin "https://<yourinstance>.dynamics.com" from accessing a cross-origin frame.
Dynamics 365 App for Outlook、電話およびタブレット PC 用 Dynamics 365、または Iframe 内で Microsoft Dataverse をホストする外部アプリケーションのコンテキストでは、カスタマイズが正しく動作しない場合があります。
注意
エラー処理がエラーをマスクしてスクリプト処理を続行する場合、予期しない動作を引き起こす可能性があります。
ガイダンス
Dynamics 365 App for Outlook、電話やタブレット向けの Dynamics 365 や、Iframe 内で Dataverse をホストしている外部アプリケーションのコンテキスト内で実行されるスクリプトで window.top
を使用しないようにしてください。 これらのシナリオが現在は組織に当てはまらないとしても、window.top
を使わないようにするか、この問題を回避してください。
重要
window.parent
または親階層のバリエーション(例えば window.parent.parent
)を使用した場合も同様の症状が発生する可能性があります。
推奨されている方法を次に示します:
window.top
オブジェクトの使用を完全に避けてください。window.top
を使用することが唯一可能なオプションである場合は、まず以下のスクリプトを使用してwindow.top
にアクセス可能か判断するためにテストをしてください。 これを利用できない場合は、代わりのロジックまたは代替ユーザー エクスペリエンスを提供してください。注意
あくまで
window.top
を使わないことをお勧めしますが、このスクリプトはそれが唯一の可能なオプションである特殊なケースに含まれています。function isTopAccessible() { try { window.top.location; return true; } catch (err) { return false; } } var canAccess = isTopAccessible(); alert(canAccess);
問題となるパターン
可能な限り、いかなる window.top
の使用も避ける必要があります。 以下は一般的なパターンの例です。
警告
これらのシナリオを回避する必要があります。
// Getting or setting variables at the top level
var myValue = window.top.myGlobalVariable;
// Attempting to access the Xrm namespace at the top level
myValue = window.top.Xrm.Page.getAttribute("column1");
追加情報
前述のシナリオで window.top
は Dynamics 365 の外部のアプリケーション コンテキストが所有するウィンドウを参照します。 オリジンが異なるため、ブラウザはユーザーにクロス オリジン セキュリティ エラーを提示します。
関連項目
JavaScript を使用するモデル駆動型アプリでクライアント スクリプトを使用してビジネス ロジックを適用
モデル駆動型アプリのフォームとグリッド内のイベント
注意
ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)
この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。