60450


以下のタグ内のhtmlコードをxmlからparse してきて、webView などで正常に表示させようと考えております。  
このhtmlのコードはブラウザで表示させると、twitterのあるtweetが表示されます。

[code]

    <htmlElement><![CDATA[<div class='large-16 columns' style="margin-bottom: 1em;" id="vfwLetter">
                <h3 class="text-center">Read the document</h3>
                <div id="DV-viewer-4501317-VFW-letter-to-to-Trump-regarding-POWs-MIAs-in" class="DC-embed DC-embed-document DV-container"></div>
                <script src="//assets.documentcloud.org/viewer/loader.js"></script>
                <script>
                    DV.load("https://www.documentcloud.org/documents/4501317-VFW-letter-to-to-Trump-regarding-POWs-MIAs-in.js", {
                    responsive: true,
                      height: 850,
                      sidebar: false,
                      pdf: false,
                      container: "#DV-viewer-4501317-VFW-letter-to-to-Trump-regarding-POWs-MIAs-in"
                    });
                </script>
                </div>]]></htmlElement>
    
[/code]

上記のコードをStringなどで取得し、WebViewで表示させることは可能でしょうか？  
もし可能なら、方法などを教えていただけたら幸いです。

また、別案などがあればお教え願えたら幸いです。


CC BY-SA 4.0
2019-11-08T02:51:12.467
60342
2019-11-13T02:44:49.693
2019-11-12T10:36:33.477
23829
36107
question
swift ios iphone
取得したHTMLやJavaScriptのコードを Swift のwebViewなどで表示させる方法


XMLの解析には[XMLParser](https://developer.apple.com/documentation/foundation/xmlparser)、HTMLの表示には[WKWebView](https://developer.apple.com/documentation/webkit/wkwebview)を使用すると良いでしょう。  
以下のコードの `htmlString` の内容を希望のXMLに置き換えれば表示されると思います。  
JavaScriptが含まれているドキュメントならJavaScriptの実行もされます。

[code]

    import UIKit
    import WebKit
    
    class ViewController: UIViewController {
    
        // Storyboardで接続されているものとする
        @IBOutlet weak var webView: WKWebView!
    
        let htmlString = """
        <htmlElement><![CDATA[<html><body>
        <h1>This is a HTML document</h1>
        <p>Hello, World!!</p>
        </body></html>]]></htmlElement>
        """
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            guard let data = htmlString.data(using: .utf8) else {
                fatalError()
            }
            let parser = XMLParser(data: data)
            let delegate = ParserDelegate()
            parser.delegate = delegate
            if parser.parse() {
                self.webView.loadHTMLString(delegate.content, baseURL: nil)
            } else if let error = parser.parserError {
                // XMLが不正だった場合
                self.webView.loadHTMLString("<html><body><h1>\(error.localizedDescription) </h1></body></html>", baseURL: nil)
            }
        }
    }
    
    class ParserDelegate : NSObject, XMLParserDelegate {
        private var inHtmlElement = false
        var content = ""
    
        func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
            if elementName == "htmlElement" {
                inHtmlElement = true
            }
        }
    
        func parser(_ parser: XMLParser, foundCharacters string: String) {
            if inHtmlElement {
                content.append(string)
            }
        }
    
        func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
            if inHtmlElement && elementName == "htmlElement" {
                inHtmlElement = false
            }
        }
    }
    
[/code]

文字列のHTMLをWKWebViewに読み込ませるには、[loadHTMLString](https://developer.apple.com/documentation/webkit/wkwebview/1415004-loadhtmlstring)メソッドを使用します。  
内容によっては、第2引数の `baseURL` を `nil` ではなく、適切な値を与えて上げる必要があるかもしれません。


CC BY-SA 4.0
2019-11-12T08:42:06.737
60450
2019-11-13T02:44:49.693
2019-11-13T02:44:49.693
23829
23829
60342
answer