使用 Swift 3 将 iframe 标记(视频)从 html 字符串加载到 Web 视图中

Posted

技术标签:

【中文标题】使用 Swift 3 将 iframe 标记(视频)从 html 字符串加载到 Web 视图中【英文标题】:Load iframe tag (video) from html string into web view using Swift 3 【发布时间】:2017-10-19 12:40:26 【问题描述】:

enter image description here

它显示灰色框架,但只有黑色边框...没有显示视频! 提示:加载函数只接受数据类型,不接受字符串...但是转换后,什么都没有!

@IBOutlet weak var webView: UIWebView!

func callWS()
    let  url = URL(string: "endpoint url")

    let config = URLSessionConfiguration.default
    let session = URLSession(configuration: config)


    let task = session.dataTask(with: url!, completionHandler: 

        (data, response, error) in

        if error != nil
        
            print("Error")
        
        else
        
            if let content = data
            
                do 
                    let myJSON = try JSONSerialization.jsonObject(with: content) as? [String:Any]

                    let text:String = myJSON?["text"] as! String

                    let textData:Data = text.data(using: .utf8)!

                    //self.webView.loadhtmlString(text, baseURL: nil) no frame
                    self.webView.load(textData, mimeType: "text/html", textEncodingName: "utf8", baseURL: NSURL() as URL)
                
                catch 
            
        
    )

    task.resume()

【问题讨论】:

您认为问题出在哪里?在let text:String = myJSON?["text"] as! String 行,text 的值是多少?它是有效的html吗?如果字符串是有效的 html,.loadHTMLString() 应该可以正常工作。 在我的问题之上,有图像......它显示了模拟器屏幕。 self.test.load(text.data(using: .utf8)!, mimeType: "text/html", textEncodingName: "UTF-8", baseURL: NSURL() as URL) //文本是来自 json 的字符串,在字符串是 html...它是有效的 html,在 android 上工作... webViewText.loadDataWithBaseURL("http://.", htmlText, "text/html", "UTF-8", null); //这适用于android...第一个参数是baseURL...如何在Swift中设置它?也许,有错误...... 您正在从“端点 url”获取 JSON 数据,是吗?您是否在解析 JSON 数据以获取 html 字符串 以加载到 Web 视图中?或者您是从 JSON 数据中提取一个新的 URL,并且想要在 Web 视图中转到该 URL? 解析 JSON 数据以获取要加载到 Web 视图中的 html 字符串。我只使用了 json 对象中的一个参数,其中包含 html 字符串代码。 【参考方案1】:

您应该可以使用.loadHTMLString()。将您的代码更改为:

    let myJSON = try JSONSerialization.jsonObject(with: content) as? [String:Any]

    let text:String = myJSON?["text"] as! String

    self.webView.loadHTMLString(text, baseURL: URL(string: "https://"))

可能还必须先替换多余的转义字符。如果没有您实际调用来获取 JSON 数据,我无法完全复制它以进行测试 - 但我必须删除它们才能使 HTML 格式正确。

所以,如果你最终显示标签而不是被解析为标签:

adassa dasdas dsadas .<\/p>

这意味着 JSON 字符串实际上包含无效字符,因此您可能希望这样做:

    let myJSON = try JSONSerialization.jsonObject(with: content) as? [String:Any]

    let text:String = myJSON?["text"] as! String

    // remove the extra "\" escape chars
    let cleanedText = text.replacingOccurrences(of: "\\/", with: "/")

    self.webView.loadHTMLString(cleanedText, baseURL: URL(string: "https://"))

【讨论】:

基本 url - 无法将字符串转换为预期的参数 URL?很快 3...我看示例,不适用于 baseURL:nil,不适用于 replaceOccurrences... 抱歉,我重新输入而不是复制/粘贴,忘记了 URL() 格式。

以上是关于使用 Swift 3 将 iframe 标记(视频)从 html 字符串加载到 Web 视图中的主要内容,如果未能解决你的问题,请参考以下文章

Youtube API 未构建 iFrame

无法使用 AVFoundation 将录制的视频上传到服务器 - Swift 3

如何将类添加到生成的 iframe 内的正文标记

在WordPress 4.9中删除图像,视频,iframe周围的自动P标签

Swift 3:如何在使用 AVFoundation 录制视频期间将麦克风静音/取消静音

居中、裁剪、适合视频背景(在 iframe 中)到父元素