SCORM: SecurityError: Blocked a frame with origin from access a cross-origin frame FOR SAME ORIGIN

Posted

技术标签:

【中文标题】SCORM: SecurityError: Blocked a frame with origin from access a cross-origin frame FOR SAME ORIGIN【英文标题】:SCORM: SecurityError: Blocked a frame with origin from accessing a cross-origin frame FOR SAME ORIGIN 【发布时间】:2020-12-10 09:08:31 【问题描述】:

我知道有很多类似的问题,唯一的区别是我从 **same ** 域提供的两个页面得到了这个。这可以在下面的示例中看到。

    Uncaught DOMException: Blocked a frame with origin "https://content.samba.net" from accessing a cross-origin frame. 
  
at findAPI (https://content.samba.net/00/07/19-10/scorm_support/scorm_support.js:14:10)   
at getAPI (https://content.samba.net/00/07/19-10/scorm_support/scorm_support.js:61:13)   
at https://content.samba.net/00/07/19-10/SCORM.htm:200:16

这不应该只发生在不同的域之间吗?

===============================编辑================ ======================== 当然,在我发布几秒钟后,我发现了问题。 SCORM 包具有定位 SCORM API 的功能。它看着顶部和开瓶器。在我的情况下,Window Opener 位于不同的域中,它试图访问它。 为了历史,我会留下它。我的答案有详细信息。

【问题讨论】:

如果 iframe 具有 sandbox 属性,请尝试将 allow-same-origin 添加到值中。原因是,在不包含allow-same-origin 的情况下,浏览器会将iframe 的来源设置为null——而从https://content.samba.net 到null 来源的请求是跨域请求。请参阅***.com/a/44765536/441757 和***.com/questions/62289103/… 的答案,有关您可能想要的更多详细信息,请参阅***.com/a/42242802/441757 @sideshowbarker 很有趣,但我的问题实际上更加琐碎和简单 - 我编辑了我的问题以反映它。 【参考方案1】:

问题已解决,它是 SCORM 协议特有的。 当你打开一段 SCORM 内容,即一堆 html、flash、js 等媒体文件时,它做的第一件事就是试图找到 SCORM api。 SCORM api 是必须在加载 SCORM 内容的窗口中的 JS。 在某些 SCORM 包中,查找 API 的函数会递归查找 TOP 窗口,即启动整个过程的初始窗口。 在我的情况下,它是我网站上的一个窗口,它在我的 CDN 上弹出了 SCORM 启动器,它具有不同的域名。

我所要做的就是解决这个问题,通过在其中添加以下两行 js 来欺骗浏览器,使其认为 SCORM 启动器(我在 CDN 上弹出的窗口)是 TOP:

window.top=window;
window.opener=window;

【讨论】:

尝试在我的父页面上添加这个似乎不起作用仍然遇到同样的问题 @oma0256 他们是同一个域吗?父页面和 SCORM 窗口? 没有不同的域 @oma0256 包含 SCORM API 的窗口,我相信(尽管可能有办法绕过它)必须与内容位于同一域 - 我就是这样做的。

以上是关于SCORM: SecurityError: Blocked a frame with origin from access a cross-origin frame FOR SAME ORIGIN的主要内容,如果未能解决你的问题,请参考以下文章

如何将 scorm 集成到 LMS(共享点)

如何计算 SCORM 交互?

SCORM 与本地数据库的集成

从 scorm 1.2 连接到 lms

SCORM 2004时间格式 - 正则表达式?

SCORM 1.2 cmi.suspend_data