SCORM:安全错误:阻止具有来源的框架访问同一来源的跨来源框架

Ita*_*vka 6 javascript iframe cross-domain scorm same-origin-policy

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

    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
Run Code Online (Sandbox Code Playgroud)

这种情况不应该只发生在不同域之间吗?

================================编辑=================== ====================
当然,在我发布几秒钟后,我发现了这个问题。SCORM 包具有定位 SCORM API 的功能。它看起来像顶部和开启器。就我而言,开窗器位于不同的域中,它试图访问该域。
为了历史的缘故,我会把它留下来。我的回答有详细信息。

Ita*_*vka 1

该问题已解决,并且是 SCORM 协议特有的问题。
当你打开一段 SCORM 内容(一堆 html、flash、js 和其他媒体文件)时,它所做的第一件事就是尝试查找 SCORM api。
SCORM api 是 JS,必须位于加载 SCORM 内容的窗口中。
在某些 SCORM 包中,查找 API 的函数会递归地查找 TOP 窗口,即启动整个过程的初始窗口。
就我而言,它是我网站上的一个窗口,在我的 CDN 上弹出 SCORM 启动器,该窗口具有不同的域名。

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

window.top=window;
window.opener=window;
Run Code Online (Sandbox Code Playgroud)