WebGL本地纹理和跨域

时间:2013-02-05 13:46:16

标签: cross-domain three.js 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:///示例))

我确切地说我在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?

谢谢!

2 个答案:

答案 0 :(得分:3)

这个问题至少已经被问过并回答了6次,甚至在three.js维基中也得到了解答。

缺点是你需要运行本地服务器。打开终端/ shell /命令提示符并键入

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

然后在浏览器中转到

http://localhost:8000

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

这是several simple servers you could use

答案 1 :(得分:0)

感谢您的回答。

事实上,它已经被问及解决了,我看到了解决方案并且它与本地服务器配合得很好,我完全同意安全性。

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

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

谢谢!