2013-02-05 19 views
0

我写了一个webgl程序,可以很好地与本地服务器协同工作,现在,我想在本地运行它。 但我有错误,经过一番研究,我发现它是加载纹理时的跨域问题。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:/// example))

我确切地说我在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发布”部分,它被写为“ - 安全(没有本地内容加载,没有跨域纹理)”。所以也许它不能在IE浏览器上解决由于IEWebGL!?

那么如果有IE浏览器的解决方案是什么?有没有办法通过更改代码来解决问题,而无需使用特殊选项启动本地服务器或Chrome?

谢谢!

回答

3

这个问题已被问及至少6次其他时间回答,甚至在three.js wiki中得到解答。

它的缺点是你需要运行本地服务器。打开一个终端/壳/命令提示符,然后键入

cd <path/to/files> 
python -m SimpleHTTPServer 

然后在浏览器中去

http://localhost:8000 

为什么是不是一种选择?这很简单,它解决了这个问题。它也不会让你的浏览器开放。

Here's several simple servers you could use

0

感谢您的回答。事实上,它已经被问到和解决了,我看到了解决方案,它适用于本地服务器,我完全同意安全性。

我在问,因为,首先,它在Firefox和Safari上没有任何服务器,而在Google上使用--allow ...,所以如果在IE上可行的话,它本来就不错。其次,因为我想要一个非常简单的程序,它可以在不需要为服务器安装python或其他程序的情况下快速运行...

实际上,它是针对离线应用程序的(我知道这对于基于Web的应用程序来说很奇怪但它不是我的选择:))。无论如何,它适用于Firefox,Chrome和Safari,对IE来说太糟糕了。

谢谢!

+0

这部分是为答案,而不是答复;您应该将其添加为其他答案的评论,而不是。如果您对其他答案感到满意,请点击复选标记接受答案。 – WestLangley