我正在使用React,Webpack并采用Micro-frontend模型。我有两个简单的应用程序如下:
1.应用程序A( shell 应用程序)
1.应用程序B(远程应用程序)。App B
使用一个简单的Web Worker,如下所示:new Worker(new URL("./myworker.ts", import.meta.url))
App B
正常运行,但在App A
上运行时,它崩溃了:Uncaught SecurityError: Failed to construct 'Worker': Script at 'appB.com/worker.js' cannot be accessed from origin 'appA.com'
我知道有一种方法是使用Blob
,但在这种情况下,我不知道如何做到这一点,因为工人是在App B
本身。
还有一件事,我希望App B
能够独立运行,并能够在shell应用程序(App A
)上运行良好。
有什么解决办法吗?谢谢
2条答案
按热度按时间thtygnil1#
为了在微前端架构中正常运行,您可以使用创建Blob URL的技术。在App B中,您可以为worker脚本创建一个Blob URL,而不是直接将脚本URL传递给
Worker
构造函数。这允许工作器在App A的上下文中运行,同时保持其独立性。myworker.ts中的worker脚本嵌入在workerScript字符串中。然后,这个字符串被转换为一个Blob对象,并使用URL.createObjectURL()分配一个URL。最后,Worker构造函数与这个创建的URL一起提供。
bt1cpqcv2#
解决方案1:使用Blob在内存中创建一个类似文件的对象。Blob对象可以创建Web Worker。
Blob对象不受与常规文件相同的安全限制,也就是说,即使两个源不同,您也可以从Blob创建Web Worker。
解决方案2:使用Service Workers作为创建后台工作者的方法,即使用户没有积极使用应用程序,这些工作者也可以运行。使用Service Worker创建可从App A和App B访问的Web Worker。
与Blob具有相同的优势
解决方案3:使用跨域资源共享(CORS)允许从不同的源加载工作者脚本。这可以通过向worker脚本添加header来完成:
参考文献: