![](/img/trans.png)
[英]SCORM: SecurityError: Blocked a frame with origin from accessing a cross-origin frame FOR SAME ORIGIN
[英]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 連接器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.