我写了一个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-shings-lally(1.在浏览器中更改本地文件的安全性(访问页面file:///example))
我确切地说,我在Firefox上没有问题,它可以在不改变任何东西的情况下工作。在Chrome上运行的唯一解决方案是启动它——允许从文件访问文件。在IE上,我不知道如何解决它,我在浏览器中启用了安全选项"跨域访问数据源"one_answers"跨不同域导航子帧"(http://msdn.microsoft.com/fr-fr/library/ee797612(v=cs.20).aspx),但什么都没有。我使用IEWebGL,我注意到http://iewebgl.com/,"IEWebGL v1.0发布"部分,写着"-安全(无本地内容加载,无跨域纹理)"。所以,也许由于IEWebGL,它无法在IE上解决!?
那么IE的解决方案是什么呢?有没有一种方法可以通过更改代码来解决这个问题,而无需启动本地服务器或带有特殊选项的Chrome?
谢谢!
这个问题已经被问了至少6次,甚至在three.js wiki中得到了回答。
简而言之,你需要运行一个本地服务器。打开终端/shell/命令提示符并键入
cd <path/to/files>
python -m SimpleHTTPServer
然后在浏览器中转到
http://localhost:8000
为什么这不是一种选择?它很简单,解决了问题。它也不会让你的浏览器被拥有。
以下是几个可以使用的简单服务器
事实上,它已经被提出并解决了,我看到了解决方案,它与本地服务器配合得很好,我完全同意安全性。
我之所以这么问,是因为,首先,它在Firefox和Safari上不需要任何服务器就可以工作,在谷歌上可以使用--allow。。。,所以,如果这在IE上是可能的,那就太好了。其次,因为我想要一个非常简单的程序,它可以快速工作,而不必为服务器安装python或其他东西,。。。
事实上,它适用于离线应用程序(我知道这对于基于web的应用程序来说很奇怪,但这不是我的选择:)。不管怎样,它适用于Firefox、Chrome和Safari,所以对IE来说太糟糕了。
谢谢!