[英]Rails: Jquery/Javascript fails to load from correct assets location
[英]Load assets accompanying a Javascript from a remote location
我们正在运行 2 台服务器。 服务器 1 托管一个 React 应用程序。 服务器 2 托管一个作为单个 javascript 包公开的 webcomponent 以及一些资产,例如图像。 我们正在服务器 1 上托管的 React 应用程序中动态加载服务器 2 上托管的 webcomponent Javascript。它是 webcomponent 的事实可能会也可能不会影响问题。
发生的事情是 webcomponent 使用了资源,例如位于服务器 2 上的图像。但是当 react 应用程序加载 webcomponent 时,由于它在服务器 1 上本地查找图像,因此找不到图像。
我们可以通过多种方式解决这个问题。 我正在寻找最简单的修复方法。 由于服务器 1 应用程序和服务器 2 应用程序由不同的团队开发,因此两者都应该能够以最自然的方式进行开发,而不会考虑到其他应用程序可能加载他们的应用程序。
我能想到的修复是:
我希望实现类似 -
由于 react 应用程序知道在哪里访问服务器 2,我们不能编写一些巧妙的 javascript 来让浏览器在服务器 2 加载的 Javascript 请求资源时转到服务器 2。
如果您通过经典脚本( <script>
with default type="text/javascript"
)下载您的 Web 组件,您可以使用document.currentScript.src
检索加载文件的 URL。
如果您将文件下载为模块脚本( <script>
with type="module"
),您可以使用import.meta.url
检索 URL。
然后解析该属性以提取 Web 组件的基本路径。
Web 组件 Javascript 文件示例:
( function ( path ) {
var base = path.slice( 0, path.lastIndexOf( '/' ) )
customElements.define( 'my-comp', class extends HTMLElement {
constructor() {
super()
this.attachShadow( { mode: 'open' } )
.innerHTML = `<img src="${base}/image.png">`
}
} )
} ) ( document.currentScript ? document.currentScript.src : import.meta.url )
如何将所有必需的资产上传到第三个位置,或者可能是 AWS S3 存储桶、Google Drive、Dropbox 等? 这样,这些资产始终具有唯一的已知 URL,并且两个团队都可以独立访问它们。 只要名称保持不变,URL 也将保持不变。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.