ionic UIWebview升级WKWebview

今年开始上传app到苹果商店如果代码里还是使用的是UIWebview则打包上传都会失败,包压根传不上去。我们项目使用的ionic+angular的框架底层就是使用的webview加载前端页面,更改起来有两种方式。

第一种升级cordova-ios

使用最新版本的cordova-ios生成的ios项目框架就是使用的WKWebview了,无需做其他的修改。

对应的版本

因为我的项目比较老旧所以想要使用最新版本的cordova-ios必须先升级cordova,想要升级cordova必须先升级node和node-sass,原来版本和升级后的版本如下
cordova-ios 4.5.4 =》6.0.0
Cordova 8.1.2 => 11.0.0
node 8.9.3 =》16.13.2
因为我升级node-sass一直失败,尝试了很多方法都不行,所以只能放弃了这个方法。如果升级都成功这个是最简单最提倡的方式。

第二种添加新插件

添加WKwebview的插件,设置WKWebview为默认引擎

1添加插件

WKWebView插件地址

ionic cordova plugin add cordova-plugin-ionic-webview –save
2设置默认引擎




3删除项目里的UIWebview

1、如图里面的6个文件都有对UIWebview的调用


WechatIMG6750.jpeg

直接删掉可能会导致项目中其他地方的引用报错,因此只把里面代码中使用到UIWebview的地方删除,留下差不多空的但是不会使项目报错的文件就可以了,如下图。


截屏2022-01-17 下午3.44.35.png
截屏2022-01-17 下午3.45.01.png

2、除了上面使用到UIWebView,CDVUserAgentUtil.m也使用到了,如下图,可以把UIWebView替换成wkwebview,但是我在导入wkwebview的时候总是提示找不到文件,因此没有替换成功,只能把红框框起来的部分先删除了,如果后续有更好的方法,希望大神们指点

WechatIMG98.jpeg

插件的替换

框架的uiwebview替换成功后,如果使用的别的插件里还有UIWebview那就单独升级那个插件,现在基本更新的插件都会进行替换,如果插件已经不更新了,则自己手动替换将使用的UIWebView替换成WKWebview

替换时有区别的是useragent

在UIWebview里是

UIWebView* sampleWebView = [[UIWebView alloc] initWithFrame:CGRectZero];
gOriginalUserAgent = [sampleWebView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];

在UIWebview里是
#import "CDVWKWebViewEngine.h"

WKWebViewConfiguration* configuration = [[WKWebViewConfiguration alloc] init];

NSString *userAgent = configuration.applicationNameForUserAgent;

替换后遇到的问题

1、跨域问题
使用WKWebview之后,会遇到跨域的问题,WKWebview禁止跨域,如果遇到这个问题就需要找后台的开发处理一下,跟他们说一下问题,网上有许多教程,设置一下就可以了


截屏2022-01-13 下午12.07.50.png

2、首次安装可以正常启动,再次打开就白屏无法加载了
我是更换之后就出来了这个问题,找了很长时间,后来发现因为项目有热更插件cordova-hot-code-push-plugin所以手机首次启动和再次启动时load的地址不同

首次加载的是
首次加载的地址.jpeg

再次启动加载的是
再次启动加载.png

将热更插件删除就好了,目前不知道为什么热更插件会出现这个问题,使用uiwebview就没事,会不会是WKWebview对热更进行了禁止,这个目前还不清楚,如果有知道如何解决的大神求指点

你可能感兴趣的:(ionic UIWebview升级WKWebview)