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 分かかります。 個人データは収集されません (プライバシー ステートメント)。