通过 Inappbrowser(IOS) 调用网页很慢。怎么可能使用 Cordova WkWebView?

Calling a web page via Inappbrowser(IOS) is slow. How is it possible using Cordova WkWebView?

我创建了通过 inappbrowser 调用网页的 cordova 应用程序 (ios)。但是由于 ios 速度下降,我用谷歌搜索并找到了 WKWebView。我已经安装了 WkWebview 的所有插件,但我想知道如何使用它调用网页? 在 Inappbrowser 中我用它来调用网页,

   var url = 'http://google.com'; 
   var target = '_blank';
   var options = "location=no,closebuttoncaption=exit,toolbar=no";
   var ref = cordova.InAppBrowser.open(url, target, options);

   ref.addEventListener('loadstart', loadstartCallback);
   ref.addEventListener('loadstop', loadstopCallback);
   ref.addEventListener('loadloaderror', loaderrorCallback);
   ref.addEventListener('exit', exitCallback);

   function loadstartCallback(event) {
  console.log('Loading started: '  + event.url)
  }

  function loadstopCallback(event) {
  console.log('Loading finished: ' + event.url)
  }

  function loaderrorCallback(error) {
  console.log('Loading error: ' + error.message)
  }

   function exitCallback() {
  console.log('Browser is closed...')
  }

同样我想知道有没有办法通过wkwebview调用网页?

你只能做一件事。使用 XIB 创建一个本地控制器并创建一个 WKWebview。编写一个 cordova 调用并将您的 url 传递给本机函数。然后在 WKWebview 中加载 url。不要使用inappBrowser。

例如。 您的 WKWebViewController.h 文件

#import <WebKit/WebKit.h>

@interface WKWebViewController : UIViewController

@property(strong,nonatomic) WKWebView *webView;
@property (strong, nonatomic) NSString *urlToBeLoaded;

@end

您的 WKWebViewController.m 文件

#import "WKWebViewController.h"

@interface WKWebViewController ()

@end


@implementation WKWebViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    NSURL *url = [NSURL URLWithString:self.urlToBeLoaded];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    _webView = [[WKWebView alloc] initWithFrame:self.view.frame];  
    [_webView loadRequest:request];
    _webView.frame = CGRectMake(self.view.frame.origin.x,self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height);
    [self.view addSubview:_webView];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

除此之外,您还必须编写一个插件 class 并在其中定义一个您将从 javascript 调用的方法。从插件 class 你必须加载上面的 Controller

更新 我已经用我的 Cordova InAppBrowser 插件的分支修复了剩余的已知问题,我已经重写它以使用 WKWebView 而不是 UIWebView(就像原来的 InappBrowser 插件一样),并将其发布为 cordova-plugin-inappbrowser-wkwebview 所以:

cordova plugin add cordova-plugin-inappbrowser-wkwebview

更新:

最新版本的 cordova-plugin-inappbrowser 允许使用 wkwebview 作为选项,这将提高 iOS 12:

的性能

尝试打开 inAppBrowser 时,将 "usewkwebview=yes" 添加到您的选项中。请务必在您的项目中安装 WKWebView 引擎插件。

文档:

https://github.com/apache/cordova-plugin-inappbrowser#cordovainappbrowseropen


使用最新版本的插件后,我的性能得到了改善。对于使用 iOS 12:

的设备尤其明显

https://github.com/apache/cordova-plugin-inappbrowser/pull/271

contains some major changes, but with UIWebView now deprecated in iOS 12, then getting this plugin to support WKWebView seems now to be a higher priority.

这是官方插件中使用此功能的已批准 PR(制作 PR 的人是其他答案中引用的 cordova-plugin-inappbrowser-wkwebview 的作者)。您可以安装最新的插件:

cordova plugin add https://github.com/dpa99c/cordova-plugin-inappbrowser#CB-7179

而且您仍然需要安装 apache/cordova-plugin-wkwebview-engine,就像 https://github.com/dpa99c/cordova-plugin-inappbrowser-wkwebview:

中的 cordova-plugin-inappbrowser-wkwebview 一样
cordova plugin add cordova-plugin-wkwebview-engine

此外,如果您在使用这些插件制作软件包时遇到问题,请确保没有冲突的插件:

为 cordova-plugin-inappbrowser 删除 cordova-plugin-inappbrowser-wkwebview(使用上面列出的 CB-7179 PR 提供的版本)

为 cordova-plugin-wkwebview-engine 删除 cordova-plugin-ionic-webview(为 ionic 3 安装)

cordova plugin rm cordova-plugin-wkwebview-engine

cordova plugin rm cordova-plugin-ionic-webview

tl;博士:

cordova plugin add https://github.com/dpa99c/cordova-plugin-inappbrowser#CB-7179

cordova plugin add cordova-plugin-wkwebview-engine

我会在 github 上关注下一个版本的 cordova-plugin-inappbrowse,看看 PR 是如何被批准和合并的。当新版本发布时,您应该只使用最新的 cordova-plugin-inappbrowser。在撰写本文时,最新版本 (3.0.0) 发布于 4 月。

https://github.com/apache/cordova-plugin-inappbrowser/releases