IOS – 来自本地HTML文件的WKWebView中的CORS

我在IOS应用程序中的WebView中加载一个本地HTML页面(使用Xamarin,但我不认为它会改变任何东西)

此本地HTML页面向远程服务器发出ajax请求。

如果我使用UIWebView,一切正常,但当我尝试使用WKWebView时,它会失败。 由于CORS失败,我尝试使用以下HTML源代码:

   

Test AJAX Requests



function TestAjaxRequest(url) { $.ajax({ url: url, success: function (result) { $("#result").html('Success'); }, error: function (jqXHR, exception) { $("#result").html('An error occured: ' + jqXHR.responseText + exception); }, }); }

对google.com的调用失败,因为在此服务器上未启用CORS,而对api.github.com的调用有效,因为在其服务器上启用了CORS。

我不想在我的服务器上启用CORS,我只想在WKWebView中启用它,是否可以使其工作?

您可以将服务器用作代理:它可以从您的浏览器接收请求,解析它并将其转换为对远程服务器的请求。 此通信将不再受浏览器限制的影响。

另一种解决方案是使用消息处理程序 ,但这将涉及访问其他项目,由远程服务器运行以建立通信。

据我所知,如果不更改服务器配置,WKWebview本身就没有解决方案。

但我有一个解决方案,即使这是一个疯狂的方式。 哈哈,我知道。

无论如何,我解决了这个问题,这是完全相同的问题。

首先,我还想使用WKWebview,因为它的性能提高,并希望使用XHR来请求服务器API。 这意味着我只想用javascript处理所有业务逻辑。

看看这个:WKWebview – > Native – > UIWebview – > Native – > WKWebview

前提。

  1. ViewController有一个WKWebview和一个UIWebview:当然,它的视图是WKWebview。 UIWebview是零大小的webview(不可见)。
  2. UIWebview只处理XmlHttpRequest。(包括XHR的最小javascript文件)

工作程序

  1. WKWebview将requestHeader和数据(对于XHR)发送到Native
  2. Native将接收的数据发送到UIWebview
  3. UIWebview请求XHR
  4. UIWebview将响应数据发送到Native
  5. Native将响应数据发送到WKWebview

使用此解决方案,您无需依赖本机代码或服务器配置。 整个实施并不困难。 你可以找到#1,2,4,5的样本代码。 虽然添加了一些额外的步骤,但总响应时间没有延迟。

我测试了所有这些。 我希望它对你有所帮助。