【问题标题】:Creating YouTube embed code in UIWebView based on URL基于 URL 在 UIWebView 中创建 YouTube 嵌入代码
【发布时间】:2014-12-09 22:21:43
【问题描述】:

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

myWebView.loadHTMLString(myHTML, baseURL: nil)

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

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

感谢任何帮助。

【问题讨论】:

    标签: ios swift uiwebview


    【解决方案1】:

    我创建了一个非常简单的函数,它查找给定类型的 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”的链接,还可以提取任何网址,您可以将其替换为您想要的任何字符串。在本例中,我只是简单地将其嵌入到 youtube 格式的 embed url 中。

    【讨论】:

    • 谢谢。使用您的测试字符串有效,但它不适用于我的 HTML。我的 HTML 看起来类似于:

      Lorem ipsum dolor sit amet, consectetur adipiscing elit.

      youtube.com/watch?v=OJJXNJo-c3Q</p>

    • 会不会是换行的原因?
    • 标签导致您的代码无法工作。我添加了这些行,然后它起作用了: htmlString = htmlString.stringByReplacingOccurrencesOfString("

      ", withString: "

      \n", options: NSStringCompareOptions.LiteralSearch, range: nil) htmlString = htmlString.stringByReplacingOccurrencesOfString("

      ", withString: "\n", 选项: NSStringCompareOptions.LiteralSearch, 范围: nil)
    • 关于删除这些 youtube 链接周围的

      标签的任何建议?

    • 好吧,问题不在于您的 p 标签,您的链接似乎没有 www。形式和上面的代码比较相同。
    猜你喜欢
    • 2012-01-20
    • 2015-01-08
    • 1970-01-01
    • 2013-03-27
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多