无法在页面上将base64图像从WKWebView发送到JavaScript

时间:2017-10-22 16:47:09

标签: javascript ios swift base64 wkwebview

我正在尝试将iOS中的UIImage的Base64表示发送到Web视图,我想我遇到了一个错误,其中字符串由于特殊字符而在JavaScript中被转义,但我并不完全确定如何处理。这就是我所要做的......

func imagePickerController(_ picker: UIImagePickerController,
                           didFinishPickingMediaWithInfo info: [String : Any])
{
    let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage

    let thumb = chosenImage.resized(toWidth: 72.0)

    let imageData:NSData = UIImagePNGRepresentation(thumb!)! as NSData

    let dataImage:String = imageData.base64EncodedString(options: .lineLength64Characters)

    webView?.evaluateJavaScript("window.settings.setImageBase64FromiOS('\(dataImage)');") { (result, error) in
        if error != nil {
            print(error!)
        } else {
            print("Success")
        }
    }
    dismiss(animated:true, completion: nil) //5

}

我一直将此错误记录到控制台。

WKJavaScriptExceptionMessage=SyntaxError: Unexpected EOF

2 个答案:

答案 0 :(得分:3)

我也遇到了同样的问题,我尝试在发送到javascript之前对字符串进行编码,如下所示:

let encodedString: String = dataImage.addingPercentEncoding(withAllowedCharacters: .alphanumerics) ?? ""

在Javascript代码中,在添加到图像源之前,

var originalImageData = decodeURIComponent(encodedImageDataString)

P.S:希望你有这种格式的前缀的最终图像数据  data :; base64,例如。

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOEAAADhCAIAAACx0UUtAAAAAXNSR0IArs4c6QAA...

答案 1 :(得分:3)

我遇到了同样的问题,但设法通过将 base64EncodedStringWithOptions 参数设置为 0 而不是“lineLength64Characters”来使其工作。我认为换行符是问题所在,'0' 将其设置为没有换行符。