SCORM托管跨源

Wer*_*lve 6 javascript scorm scorm1.2 reactjs

我尝试在不运行我的LMS(学习管理系统)的另一个域上托管一个SCORM电子学习模块。SCORM模块通常在它们自己的浏览器框架/窗口中运行,并且直接与LMS通信,并且全部在同一域上运行。这没有问题,因为没有安全问题。已经用我的代码尝试过这种情况,它可以工作。

为了将模块存档在其他服务器上,我尝试使用包装器之类的东西。这些包装器托管在LMS上,从extern加载内容,并通过postMessage与LMS进行通信。我尝试了这个开源项目:https//github.com/Didask/scol-r

但是我不起作用。每当我遇到错误时:Error grabbing 1.2 API-SecurityError:Blocked a frame with origin "https://..." from accessing a cross-origin frame. Protocols, domains, and ports must match. 尝试访问不允许的内容。在“ SCORM_ScanParentsForApi”方法中引发异常。

我已经问过这个项目的作者了,但是他根本没有答案。我在响应中设置了一个小型演示项目来模拟LMS。添加了包装器模块,该包装器模块指向托管SCORM模块的外部内容服务器。

也许有人有想法或可以给我提示。我认为这是微不足道的。希望;)谢谢!

sha*_*020 1

您的具体问题是 Access-Control-Allow-Origin 标头 https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/CORSAllowOriginNotMatchingOrigin

所以我们在 sosafe.de 上,而 skorm 课程在 lms0.sosafe.de 上,这将导致 CORS 错误。您需要接受您的响应标头。

你可以用你的 apache 配置来做到这一点。这将使响应能够通过。

SetEnvIf Origin "http(s)?:\/\/(.+\.)?sosafe\.de(:\d{1,5})?$" CORS=$0

Header set Access-Control-Allow-Origin "%{CORS}e" env=CORS
Header merge  Vary "Origin"
Run Code Online (Sandbox Code Playgroud)

您不必完全使用此代码,但可以修改服务器以添加标头 Access-Control-Allow-Origin。如果您Access-Control-Allow-Origin: *这样做,将启用来自任何地方的跨源请求(尽管您应该只允许您信任的域)。这应该可以解决你的问题。

否则它们应该位于同一域中。由于 SCOL-R scorm 连接器的设计允许您访问 API,这可能是不可能的。