【问题标题】:Can not render image from S3 bucket in WebGL无法从 WebGL 中的 S3 存储桶渲染图像
【发布时间】:2015-07-03 08:41:37
【问题描述】:

当我的 JavaScript 应用程序尝试从我的 Amazon S3 帐户加载图像并在 WebGL 中呈现它时,浏览器会引发 CORS 错误。我更改了 S3 存储桶的 CORS 配置以允许访问:

<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>Authorization</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

不幸的是,当我尝试从 S3 存储桶渲染图像时,浏览器仍然会抛出 CORS 错误。

我错过了一个步骤吗?或者,这只是正常的吗?换句话说,WebGL 是否总是拒绝跨域文件,无论文件的域是否允许通过适当的 CORS 配置访问?

【问题讨论】:

    标签: javascript amazon-s3 cors webgl


    【解决方案1】:

    According to MDN

    为了将 CORS 作为 WebGL 纹理加载,我们在其上设置了 crossOrigin 属性:

    var earthImage = new Image();
    earthImage.crossOrigin = "anonymous";
    

    现在我们照常加载它:

    earthImage.onload = function() {
      // whatever you usually to do load WebGL textures
    };
    earthImage.src = "http://khm0.googleapis.com/kh?v=95&x=0&y=0&z=0";
    

    【讨论】:

    • 谢谢,Gman。我将此标记为已回答,因为您的答案显然是正确的并且适用于 Firefox。不幸的是,它不适用于 Chrome 或 IE。我猜那些浏览器根本还不支持“crossOrigin”属性。 :-(
    • 尝试将其设置为 earthImage.crossOrigin = ""; Chrome 是第一个支持 WebGL 的 cors 的,所以它应该可以工作。
    • earthImage.crossOrigin = ""; 也不起作用。 AWS CORS 文档声明 AWS 不会将 Access-Control-Allow-Origin 标头添加到响应中,除非请求包含原始标头。所以,也许 Chrome 和 IE 不包含 origin 标头。
    猜你喜欢
    • 2019-11-29
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 2020-04-18
    • 2017-02-01
    • 2021-11-14
    相关资源
    最近更新 更多