WKWebView无法将Base64图像发送到页面上的JavaScript,出现问题。

6

我正在尝试将iOS中UIImage的Base64表示发送到Web View,但我认为由于特殊字符的原因,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=语法错误:意外的EOF

2个回答

5
我也遇到了同样的问题,我尝试在将字符串发送到javascript之前对其进行编码,如下所示:
let encodedString: String = dataImage.addingPercentEncoding(withAllowedCharacters: .alphanumerics) ?? ""

在Javascript代码中,在添加到图像源之前,
var originalImageData = decodeURIComponent(encodedImageDataString)

希望您已经拥有以此格式为前缀的最终图像数据 data:;base64,例如。
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOEAAADhCAIAAACx0UUtAAAAAXNSR0IArs4c6QAA...

3

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接