我正试图用从图像编译的网格填充WebGL Earth。这些图像是跨域的,托管在服务器上,在服务器上无法设置适当的标头。我可以XMLHttpRequest图像URL,然后通过PHP将它们提供给我自己以绕过CORS错误吗?
或者,更具体地说,我可以使用我自己的Web服务器作为代理,在WebGL上下文中为自己提供img URL(绕过CORS)吗?
EDIT:这里真正的问题是,我是否可以使用自己的Web服务器作为代理来传递URL,或者我是否必须将每个图像下载到服务器才能使用它。
我曾经在使用API时遇到过类似的问题。首先,我尝试在JS中执行所有操作,可能会得到与您相同的错误消息。
我的解决方案是切换到PHP并在服务器端执行它,因为现代浏览器会阻止你想做的事情
所以是的,这是可能的
在后台获取图片,然后将其提供给前端。
只需先检索图片,然后将其作为输出发送到浏览器即可。你可以通过做一些类似的事情来同步地做到这一点:
$ch = curl_init ...
...
$pic = curl_exec ... // get the picture
// and then echo it
我做过一次,但记不清了。或者您可以异步执行,这通常是在使用img标记时执行的。我不确定它是如何与WebGL协同工作的,但应该类似:
- 将图片下载到文件系统
- 然后将URL提供给浏览器
这取决于图像有多大,需要多长时间,以及API是否要朝这个方向发展。
第一条评论的答案:
狡猾。我没有使用WebGL Earth的经验,也不知道是否可以通过Ajax异步加载数据(请看这里),或者如果你在其中使用AngularJS(请看此处)。你需要尝试一下。我会特别研究装载时间。
有一个类似http://example.com/api/get_image/65446
的API-call可以下载图片,调整大小,然后将其发送到浏览器。
在这种情况下,你会做的是:
- 将"正常"页面发送给用户
- 然后,您可以在那里查找要显示图片的事件
- 当事件发生时,使用我刚才提到的API-call,并使用成功处理程序将其添加到页面中。同样,我无法回答的另一个问题是如何与WebGL Earth合作
如果你想在移动设备上使用它,你需要考虑图片的大小。由于屏幕相对较小,您应该先将图片缩小。但是,我想这是最大的挑战。想要滚动地球仪的人希望立即看到图片,而不是在5秒钟后(因为我滚动的可能性更大)
考虑是否可以先准备下载并调整大小如果你只想显示某些图片,比如总共10000张,那么我会这么做。然后你就不需要考虑加载时间以及何时删除哪些图片了。您应该为该主题打开另一个问题,并首先尝试Ajax是否可行。