使用chrome中的three.js拒绝跨源图像加载

Nam*_*ANG 20 javascript google-chrome cross-domain three.js

试图THREE.js像这样添加材料

var materialWall = new materialClass( { color: 0xffffff, map: THREE.ImageUtils.loadTexture( 'images/a.png' ) } );
Run Code Online (Sandbox Code Playgroud)

它在Chrome,IE,FF中工作正常,直到3天前,Chrome更新到最新的开发版17.

Chrome 17只是不加载图片并抱怨以下内容

Cross-origin image load denied by Cross-Origin Resource Sharing policy.
Run Code Online (Sandbox Code Playgroud)

这是疯了,因为图像显然在同一个域中,所以这是chrome或THREE.js还是别的问题?

Orb*_*den 13

如果您从localhost运行Chrome并使用Three.js,则可能需要使用此命令行标记运行Chrome:

c:// ... /chrome.exe --allow-file-access-from-files
Run Code Online (Sandbox Code Playgroud)

  • 好吧,但用户将不会运行该命令..这对我来说似乎不是一个可行的解决方案 (4认同)

Mr.*_*oob 12

https://github.com/mrdoob/three.js/issues/687引用了three.js的GitHub上的一个问题,它有很好的解决方法列表,包括一个描述如何在本地运行的wiki页面的链接.该线程中还有一些其他解决方法,包括在脚本中添加以下内容:

THREE.ImageUtils.crossOrigin = "";
Run Code Online (Sandbox Code Playgroud)

或者,添加CORS标头以便特别允许它们.

请注意,大部分此类信息是从已存在的问题链接添加的,此答案的原作者未包含该链接.


Tim*_*Tim 7

如果你:

  • 不想设置自己的服务器,和
  • 不想降级浏览器的安全性

然后我找到了解决这个问题的方法,只需要一点努力:

  1. 将图像转换为Base64文本
  2. 将其存储在外部Javascript文件中
  3. 将其链接到您的项目页面
  4. 将其加载到纹理中

有关详细信息,请访问http://tp69.wordpress.com/2013/06/17/cors-bypass/.