[英]Cross-origin image load denied on a local image with THREE.js on Chrome
[英]Cross-origin image load denied with three.js in chrome
试图像这样在THREE.js
添加材料
var materialWall = new materialClass( { color: 0xffffff, map: THREE.ImageUtils.loadTexture( 'images/a.png' ) } );
它在Chrome,IE,FF中工作正常,直到3天前,Chrome更新到最新的开发版17。
Chrome 17只是不加载图片并抱怨以下内容
Cross-origin image load denied by Cross-Origin Resource Sharing policy.
这是疯了,因为图像显然在同一个域中,所以这是chrome或THREE.js还是别的问题?
如果您从localhost运行Chrome并使用Three.js,则可能需要使用此命令行标记运行Chrome:
c:// ... /chrome.exe --allow-file-access-from-files
https://github.com/mrdoob/three.js/issues/687引用了three.js的GitHub上的一个问题,它有很好的解决方法列表,包括一个描述如何在本地运行的wiki页面的链接 。 该线程中还有一些其他解决方法,包括在脚本中添加以下内容:
THREE.ImageUtils.crossOrigin = "";
或者,添加CORS标头以便特别允许它们。
请注意,大部分此类信息是从已存在的问题链接添加的,此答案的原作者未包含该链接。
如果你:
然后我找到了解决这个问题的方法,只需要一点努力:
有关详细信息,请访问http://tp69.wordpress.com/2013/06/17/cors-bypass/ 。
您还可以通过从根文件夹运行以下命令来使用python运行简单的HTTP服务器。
python -m SimpleHTTPServer 8000
1)Chrome快捷方式 - >属性 - >快捷方式选项卡 - >目标并最后在目标中添加--allow-file-access-from-files 。 (在执行此操作之前杀死所有chrome任务。)
要么
2)下载Mongoose Web服务器软件。 将它放在您的工作目录中,然后运行它。 它将在浏览器http:// localhost:PORT中打开,它将为您的所有文件提供服务。
要么
3)您还可以在应用程序中使用NodeJS服务器 。
这对我在命令行\\ terminal工作:
./chrome.exe --disable-web-security
*请注意,在执行命令之前必须关闭所有chrome实例才能使其工作。
完美的解决方案:
THREE.js:拒绝交叉原始图像加载
只需将时间戳添加到图像网址即可。 我不知道它背后的逻辑,但它的确有效。
例:
var material = new THREE.MeshBasicMaterial({
map: loader.load(url + "?v=" + (new Date()).toString(), function() {
animate();
})
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.