SCORM:SecurityError:阻止具有原始来源的框架访问同一原产的跨来源框架

时间:2020-08-21 00:57:57

标签: javascript iframe cross-domain same-origin-policy scorm

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

    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在另一个域中,它正在尝试访问该域。
为了历史,我将其保留。我的答案有详细信息。

1 个答案:

答案 0 :(得分:1)

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

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

{
“fields”:[“first_name",”last_name”,”street”,”city”,”state”,”postal_code”,"email.address”,”age”,”family.estimated_income”,”real_estate.estimated_home_value”,”family.appeared_on”],  

"identifiers": {
    "first_name": "Jim",
    "last_name": "Shoo",
    "street": "123 Main St",
    "city": "Chicago",
    "postal_code": "60600"
  }
}