簡體   English   中英

SCORM 托管跨域

[英]SCORM Hosting Cross-Origin

我嘗試托管一個分散在其他域上的 SCORM 電子學習模塊,而不是我的 LMS(學習管理系統)正在運行。 SCORM 模塊通常在它們自己的瀏覽器框架/窗口中運行,並直接與 LMS 通信,全部運行在同一個域中。 這沒有問題,因為沒有安全問題。 已經用我的代碼嘗試過這個案例並且它有效。

為了存檔模塊托管在其他服務器上,我嘗試使用諸如包裝器之類的東西。 這些包裝器托管在 LMS 上,從外部加載內容並通過 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. 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 模塊的外部內容服務器的包裝器模塊。

也許有人有想法或可以給我一個提示。 我認為這是微不足道的事情。 希望 ;) 謝謝!

您的具體問題是 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"

您不必完全使用此代碼,但是,修改服務器以添加標頭 Access-Control-Allow-Origin。 如果您執行Access-Control-Allow-Origin: *這將啟用來自任何地方的跨域請求(盡管您應該只允許您信任的域)。 這應該可以解決您的問題。

否則它們應該在同一個域中。 這可能是不可能的,因為 SCOL-R 的設計是允許您訪問 API 的 scorm 連接器。

你可以看看這個商業解決方案,它是 scorm 雲的替代品:

https://www.scormnext.es

它允許您使用 SCORM 連接器(調度程序)將 SCORM 內容遠程分發到外部 LMS。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM