根据URL在UIWebView中创建YouTube嵌入代码

时间:2014-12-09 22:21:43

标签: ios swift uiwebview

我有我在UIWebView上设置的HTML内容,如下所示:

myWebView.loadHTMLString(myHTML, baseURL: nil)

myHTML可以在其内容中包含一些YouTube链接,如下所示: https://www.youtube.com/watch?v=OJJXNJo-c3Q

如何修改myHTML字符串,以便将每个YouTube链接替换为该链接的YouTube嵌入代码,以便它在UIWebView中显示为嵌入式视频?我认为正则表达式可以提供帮助,但我对此并不擅长。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我创建了一个非常简单的函数,它查找给定类型的url并用给定的主机替换带有新字符串的url。

    func replaceUrlMatchesInText(text: NSString, forHost hostString: NSString,  replaceBlock:  (NSString) -> NSString) -> NSString {
    var error: NSError? = nil
    var newText = text
    let dataDetector = NSDataDetector(types: NSTextCheckingType.Link.rawValue,
        error: &error)
    if let matches = dataDetector?.matchesInString(text,
        options: NSMatchingOptions.ReportCompletion,
        range: NSMakeRange(0, text.length)) as? [NSTextCheckingResult] {
            for match in matches {
                let range = match.rangeAtIndex(0)
                let matchedString = text.substringWithRange(range)
                if matchedString.hasPrefix(hostString) {
                    let iFrameFormat = replaceBlock(matchedString)
                    let newRange = newText.rangeOfString(matchedString)
                    newText = newText.stringByReplacingCharactersInRange(newRange, withString: iFrameFormat)
                }
            }
    }
    return newText
}

var htmlString =  "<html><body style='background-color: transparent; color: white; font-family: HelveticaNeue-Light; padding: 20px;'><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. </p> <p></p> <p>youtube.com/watch?v=OJJXNJo-c3Q</p>; </body></html> "

let youtubeEmbeddedVideoHtmlString = replaceUrlMatchesInText(htmlString, forHost: "youtube.com") {
    (match: NSString) in
    return "<iframe width=\"560\" height=\"315\" src=\"//\(match)\" frameborder=\"0\" allowfullscreen></iframe>"
}

println(youtubeEmbeddedVideoHtmlString)

此功能不仅可以通过“www.youtube.com”提取链接,还可以提取任何网址,您可以将其替换为您想要的任何字符串。在这个例子中,我只是将它嵌入到嵌入式URL的youtube格式中。