0

我的内容通过 LTI 启动加载到另一个应用程序中。该应用程序正在尝试在其 iFrame 中加载内容。

我的内容有 javascript 调用,写为top.setLinkVisibility=setLinkVisibility; top.isDeeplinkSession()

当这些 javascript 关键字被执行时,内容未正确加载(获取权限被拒绝异常)错误:访问属性的权限被拒绝

在此处输入图像描述

此内容将在我的应用程序中加载,也将在我的应用程序之外加载(通过 LTI 启动)。

现在我们尝试用top关键字替换它self它工作正常

但要使其适用于所有内容,我们必须在 1000 多个文件中将关键字 top 替换为 self ,这真的很乏味。

还有其他方法可以使内容正常工作吗?将 top 替换为 self 是一种方法..但还有更简单的方法吗?

4

1 回答 1

1

不,没有别的办法。top自动引用窗口层次结构中最顶层的窗口。由于它是只读的(以防止 iframe 访问父文档的window),因此无法使用该window.top属性。您必须将所有top用法替换为self(不是只读或保留的),或者将整个脚本放在不同的范围内。

由于window.top属性是window对象的属性,因此它自动成为全局变量。如果您在任何函数之外(在全局范围内)定义变量,它将是window对象的属性,因此无法var top在全局范围内定义,因为那必须覆盖 read-only window.top。但是,如果您要var top在函数内部使用,它就可以正常工作,如以下示例所示:

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

将来,最好避免使用过于通用的变量名称,例如top. 它们很容易引起问题。特别是当它们需要成为全局变量时。

于 2014-04-25T15:38:44.587 回答