0

我写了一个 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.Change security for local files in a browser (access page as 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 Released”部分,写着“- Secure (no local content loading, no cross-domain textures)”。因此,由于 IEWebGL,它可能无法在 IE 上解决!?

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

谢谢!

4

2 回答 2

3

这个问题至少已经被问及回答了 6 次,甚至在 three.js wiki 中也得到了回答。

简而言之,您需要运行本地服务器。打开终端/shell/命令提示符并输入

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

然后在您的浏览器中转到

http://localhost:8000

为什么这不是一个选择?这很简单,它解决了问题。它也不会让您的浏览器被拥有。

这里有几个你可以使用的简单服务器

于 2013-02-06T09:40:53.270 回答
0

感谢您的回答。

事实上,它已经被询问并解决了,我看到了解决方案,它在本地服务器上运行良好,我完全同意安全性。

我问这个是因为,首先,它在 Firefox 和 Safari 上没有任何服务器,在谷歌上也可以使用 --allow...,所以如果在 IE 上可行,那就太好了。其次,因为我想要一个非常简单的程序,它可以快速运行,而无需为服务器安装 python 或其他东西,...

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

谢谢!

于 2013-02-06T11:35:40.053 回答