检查wkwebview中javascript中是否存在文件

时间:2018-09-27 09:11:03

标签: javascript ios cordova cors wkwebview

我正在构建一个混合应用程序,我一直在尝试使用它之前测试本地图像是否存在于本地,但是由于出现CORS错误,我被困在iOS的wkwebview上。

var loadImage = function(urlImage) {
    var deferred = $q.defer();
    var xhr = new XMLHttpRequest();
    xhr.open('HEAD', urlImage, true);
    xhr.onload = function(e) {
        if (xhr.readyState === 4) {
            if (xhr.status === 200) {
                deferred.resolve(true);
            } else {
                deferred.resolve(false);
            }
        }
    };
    xhr.onerror = function(e) {
        deferred.resolve(false);
    };
    xhr.send();
    return deferred.promise;
};

我遇到以下错误:

  

XMLHttpRequest无法加载“”。跨源请求仅受HTTP支持。

我宁愿不使用插件来绕过此错误,有没有办法做到这一点?

谢谢。

1 个答案:

答案 0 :(得分:0)

我认为您应该在WKWebView中添加一个userContentController,然后从Javascript代码中发布一条消息,以使其在应用程序本机环境中处理请求。

将此添加到viewDidLoad

yourWebView.configuration.userContentController.add(self, name: "callbackHandler")

然后

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
    if message.name == "callbackHandler" {
        let content = message.body as! String
...

因此您可以使用来与应用通信

webkit.messageHandlers.callbackHandler.postMessage('a message');