0

私のコンテンツは、LTI 起動を介して別のアプリケーションに読み込まれます。そのアプリケーションは、コンテンツを iFrame にロードしようとしています。

私のコンテンツには、次のように書かれたJavaScript呼び出しがありますtop.setLinkVisibility=setLinkVisibility; top.isDeeplinkSession()

これらの JavaScript キーワードが実行されると、コンテンツが正しく読み込まれません (アクセス許可拒否例外の取得)エラー: プロパティへのアクセス許可が拒否されました

ここに画像の説明を入力

このコンテンツは、アプリケーション内にロードされるだけでなく、(LTI 起動を介して) アプリケーションからもロードされます。

top今、キーワードをに置き換えようとしましたがself正常に動作します

しかし、すべてのコンテンツで機能させるには、1000 以上のファイルでキーワード top を self に置き換える必要があり、これは非常に面倒です。

コンテンツを機能させる他の方法はありますか? top を self に置き換えるのは 1 つの方法ですが、もっと簡単な方法はありますか ??

4

1 に答える 1

1

いいえ、他に方法はありません。ウィンドウ階層の最上位のウィンドウtopを自動的に参照します。これは読み取り専用であるため (iframe が親ドキュメントの にアクセスできないようにするため)、このプロパティを使用する方法はありません。すべての使用箇所を(読み取り専用でも予約済みでもない)に置き換えるか、スクリプト全体を別のスコープに配置する必要があります。windowwindow.toptopself

window.topプロパティはwindowオブジェクトのプロパティであるため、自動的にグローバル変数になります。関数の外側 (グローバル スコープ内) で変数を定義すると、それはwindowオブジェクトのプロパティになるためvar top、読み取り専用を上書きする必要があるため、グローバル スコープで定義することはできませんwindow.top。ただし、関数内で使用する場合はvar top、次の例で示すように問題なく動作します。

function foo() {
    var top = 'test';
    return top;
}
alert(foo()); //Alerts "test"

今後は、 などの過度に一般的な変数名を避けることが最善topです。それらは簡単に問題を引き起こす可能性があります。特に、それらがグローバル変数である必要がある場合。

于 2014-04-25T15:38:44.587 に答える