在 iOS cordova 应用程序中渲染纹理时出现安全错误
Security Error when rendering textures in iOS cordova app
我正在使用 Cordova 开发一个移动应用程序,其中包含一个 HTML canvas,并且我正在使用 three.js 作为 3d 环境。
当我尝试渲染 3d 环境时,纹理渲染不正确;我所有的 3d 对象都显示为黑色。控制台抛出错误:
THREE.WebGLState: – SecurityError: 操作不安全。 — three.min.js:111
q — three.min.js:114:271
这是一个 texImate2d 函数。
我认为这不是 CORS 问题,因为我的所有纹理文件都是应用程序的本地文件。我正在创建图像对象并使用 cordova.file.applicationDirectory + 路径作为加载纹理的源。当我在 Three.js WebGLRenderer 上调用 render() 时,在我加载纹理并将对象添加到场景后发生错误。
更疯狂的是,这在一周前就可以正常工作,而加载失败的纹理似乎无处不在。我没有在应用程序中更改与此相关的任何内容,并且我不知道有任何重大更新。这在 Android 设备上仍然可以正常工作。
我对这个问题进行了大量搜索,大多数类似问题似乎都与 CORS 相关,但正如我所说,我认为情况并非如此,因为所有纹理文件都是应用程序的本地文件.有没有人遇到过这个?谢谢!
我终于明白了。对于纹理图像,我使用路径字符串设置图像的 src,这显然是 ios 中的一个安全问题(尽管我仍然不知道为什么它一开始工作然后停止了)。
我将其切换为使用文件系统 API 以二进制形式读取图像,然后使用 btoa() 将其转换为 base64,最后将生成的字符串设置为带有前缀 'data:image/jpeg;base64,'。现在可以使用了。
我正在使用 Cordova 开发一个移动应用程序,其中包含一个 HTML canvas,并且我正在使用 three.js 作为 3d 环境。
当我尝试渲染 3d 环境时,纹理渲染不正确;我所有的 3d 对象都显示为黑色。控制台抛出错误:
THREE.WebGLState: – SecurityError: 操作不安全。 — three.min.js:111 q — three.min.js:114:271
这是一个 texImate2d 函数。
我认为这不是 CORS 问题,因为我的所有纹理文件都是应用程序的本地文件。我正在创建图像对象并使用 cordova.file.applicationDirectory + 路径作为加载纹理的源。当我在 Three.js WebGLRenderer 上调用 render() 时,在我加载纹理并将对象添加到场景后发生错误。
更疯狂的是,这在一周前就可以正常工作,而加载失败的纹理似乎无处不在。我没有在应用程序中更改与此相关的任何内容,并且我不知道有任何重大更新。这在 Android 设备上仍然可以正常工作。
我对这个问题进行了大量搜索,大多数类似问题似乎都与 CORS 相关,但正如我所说,我认为情况并非如此,因为所有纹理文件都是应用程序的本地文件.有没有人遇到过这个?谢谢!
我终于明白了。对于纹理图像,我使用路径字符串设置图像的 src,这显然是 ios 中的一个安全问题(尽管我仍然不知道为什么它一开始工作然后停止了)。
我将其切换为使用文件系统 API 以二进制形式读取图像,然后使用 btoa() 将其转换为 base64,最后将生成的字符串设置为带有前缀 'data:image/jpeg;base64,'。现在可以使用了。