离子iOS混合应用程序如何在没有CORS问题的情况下将图像加载到画布中

亚历克斯·普雷德斯库

我想将图像加载到用于显示自定义Google地图标记的画布中。以下代码适用于浏览器和Android,但不适用于iOS,因为WKWebView对此不接受CORS请求。

let ctx = canvas.getContext('2d');
let img = new Image();
img.crossOrigin = "anonymous";
img.src = url;

img.onload = function () {
    // process and load the image into the canvas map marker
};
img.onerror = function () {
    // handle fallback                    
};

必须从Google Maps照片api(以及我无法控制服务器上的CORS设置的其他api)加载图像。这必须在应用程序中以某种方式处理。

有什么可能的解决方案?

我发现的一件事是ionic-image-loader(https://github.com/zyra/ionic-image-loader),它使用ionic本机http请求将图像加载和缓存到img标签中。但是,这可以从html运行,并且我需要直接在js / ts中使用它,这似乎是不可能的。

如果我尝试通过ionic http请求加载图像,即使在浏览器中,该请求也会被CORS阻止,而不是通过img标签加载图像。也许(以某种方式)可以将以下标头设置为ionic http请求,以便该请求看起来相同:Sec-Fetch-Mode:no-cors

[WKWebView]即使本地图像也无法以这种方式加载,并且显示:Access-Control-Allow-Origin不允许使用Origin null(无法加载图像:file:/// ...),然后卡在循环中尝试加载图像。

亚历克斯·普雷德斯库

通过使用cordova本机http使用ionic-image-loader预加载功能的分支解决,完全绕过了HTTP请求的Webview并手动处理了缓存。这也是在iOS WKWebView上完成http请求的方式:

let options = {
    method: 'get',
    responseType: 'blob',
    data: {},
    headers: {}
};

cordova.plugin.http.sendRequest(url, options, (data: any) => {
    let blob = data.data;
    resolve(blob);
}, (error: any) => {
    console.log(error.status);
    console.log(error.error);
    reject(error.error);
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不使用<iframe>标记的情况下将聊天应用程序加载到iframe中?

如何在没有ProtoBuf格式错误的情况下将数据加载到BigQuery中?

如何在Linux中没有其余GUI的情况下加载自己的GUI应用程序?

在没有本机应用程序的情况下将图像分享到Android中的Twitter

XDK如何在没有MAC的情况下编译IOS应用程序?

Flutter Ios如何在没有exit(0)的情况下退出应用程序?

如何在没有登录内容的情况下将 DocuSign 集成到 Android 应用程序中

如何在eclipse中没有main方法的情况下运行JavaFX应用程序?

如何在商店中没有应用程序的情况下配置应用程序剪辑

如何在没有php,jquery的情况下将画布图像保存到mySQL

如何在不冻结应用程序的情况下从 URL 加载 C# Winforms 中的图像?

如何在iOS 9中启用“应用程序传输安全性”的情况下加载HTTP URL?

Gmail 等 IOS 应用程序如何在没有推送通知的情况下更新(递减)徽章计数器

如何在没有Apple开发人员帐户的情况下使用Delphi Seattle将iOS应用程序部署到iPhone?

如何在没有电子打包程序的情况下更改电子应用程序图标?

在Katalon Studio中,如何在没有标签或名称对象属性的情况下如何点击iOS应用程序的元素

如何在没有多个版本的情况下将React应用程序部署到多个环境?

如何在没有QProcess的情况下将终端嵌入PyQt5应用程序?

gcp - 如何在没有密钥文件的情况下将 Python 应用程序作为服务帐户运行

如何在没有文件的情况下将 Chrome 应用程序文件放在 Github 上?

如何在没有 .desktop 的情况下将图标分配给(第 3 方)应用程序

如何创建可以在没有Apple Store的情况下安装的IOS应用程序?

如何在Racket中没有框架的[x]按钮的情况下从GUI应用程序退出

在没有应用程序/扩展名的情况下,如何在Chrome桌面中获取标签计数?

如何在没有 spring boot 和 springrest 的情况下将 Jersey 集成到 spring 5 mvc 应用程序中

如何在没有Rubberduck TestModules的情况下交付Excel VBA应用程序?

如何在没有 Eclipse 的情况下运行 Spring Boot 应用程序?

如何在没有提示的情况下以管理员身份运行应用程序?

如何在没有sudo特权的情况下构建应用程序?