我编写了一个适用于本地服务器的webgl程序,现在,我想在本地运行它。 但是我有错误,经过一些研究后,我发现它在加载纹理时是一个跨域问题。
function loadTexture( path ) {
var texture = new THREE.Texture( texture_placeholder );
var material = new THREE.MeshBasicMaterial( { map: texture, overdraw: true} );
var image = new Image();
image.onload = function () {
texture.needsUpdate = true;
material.map.image = this;
render();
};
texture.deallocate();
renderer3D.deallocateTexture( texture );
return material;
}
我尝试了几种解决方案:
github.com/mrdoob/three.js/issues/1305
github.com/mrdoob/three.js/issues/944
gist.github.com/ekeneijeoma/1186920
github.com/mrdoob/three.js/wiki/How-to-run-things-locally(1。更改浏览器中本地文件的安全性(访问页面为file:///示例))
我确切地说我在Firefox上没有问题,它可以在不改变任何东西的情况下工作。 唯一适用于Chrome的解决方案是使用--allow-file-access-from-files启动它。 在IE上,我不知道如何解决它,我启用了浏览器安全选项“跨域访问数据源”和“跨不同域导航子帧”(http://msdn.microsoft.com/fr-fr/library/ee797612(v=cs.20).aspx),但没有。我使用IEWebGL,我注意到在http://iewebgl.com/,“IEWebGL v1.0 Released”部分,它写的是“ - 安全(没有本地内容加载,没有跨域纹理)”。因为IEWebGL可能无法在IE上解决它!?
那么IE的解决方案是什么,如果有的话?有没有办法通过更改代码来解决问题,而无需使用特殊选项推出本地服务器或Chrome?
谢谢!
答案 0 :(得分:3)
这个问题至少已经被问过并回答了6次,甚至在three.js维基中也得到了解答。
缺点是你需要运行本地服务器。打开终端/ shell /命令提示符并键入
cd <path/to/files>
python -m SimpleHTTPServer
然后在浏览器中转到
http://localhost:8000
为什么这不是一个选择?它很简单,它解决了这个问题。它也不会让您的浏览器开放拥有。
答案 1 :(得分:0)
感谢您的回答。
事实上,它已经被问及解决了,我看到了解决方案并且它与本地服务器配合得很好,我完全同意安全性。
我之所以这么说是因为,首先,它在Firefox和Safari上没有任何服务器,而在Google上使用--allow ...,所以如果它可以在IE上运行,那就不错了。其次,因为我想要一个非常简单的程序,它可以快速运行而无需为服务器安装python或其他东西,...
事实上,这是一个离线应用程序(我知道基于Web的应用程序很奇怪,但它不是我的选择:))。无论如何,它适用于Firefox,Chrome和Safari,对IE来说太糟糕了。
谢谢!