2017-11-29 9 views
0

目的:HTMLを文字列として取り込み、その中のイメージタグの属性を編集し、HTMLを文字列として返します。HTMLElementのinnerHTMLおよびouterHTMLプロパティは、エラーなしで未定義に戻ります。

My機能は次の行に沿っている:

private resolveImagesInHTML (body: string): string { 

    let htmlParser = new domParser.DOMParser();  // from react-native-html-parser 
    let parsedDOM: HTMLDocument = htmlParser.parseFromString('<html>' + body + '</html>', 'text/html'); 

    // ------- code to modify DOM goes here ------- 

    return parsedDOM.documentElement.innerHTML; 
} 

問題:私は私のデバッグコンソール、 にparsedDOMまたはparsedDOM.documentElementを印刷する場合それは正しく修正HTMLコンテンツを表示します。驚いたことに、 innerHTMLまたはouterHTMLプロパティはエラーをスローしませんが、 '未定義'を返します。

明らかに私のコードを修正している間にHTMLのフォーマットが乱れている可能性がありましたが、上記の3行以外のすべての機能についてコメントしても、動作は同じです。

私はここで間違っている可能性がありますか? ありがとう、私はReact-Nativeとtypescriptをかなり使い慣れているので、ここで些細で明白なことがないと驚かれることはありません。

答えて

0
htmlParser.parseFromString 

はDOMのように見えるものを返しますが、DOMと共通の方法がいくつかありますが、すべてではありません。 .innerHTMLはありません。実際のブラウザのDOMはそれを持っています。ここに書かれているものhttps://www.npmjs.com/package/react-native-html-parser innerHTMLプロパティから

は、なぜそれがエラーをスローしません

利用できないのですか?それはJavaScriptオブジェクトの仕組みだからです。

console.log({}.innerHTML) // No Error 

エラーを強制的に適用する方法はありますか?

解決策は2つあります.1つは厳密モードを使用し、コンソールで厳密なモードの警告を有効にすることです。もう1つはProxyでラップして、たとえばhasOwnPropertyをチェックします。

+0

ありがとうございました。同じリンクには、要素を拡張するHTMLElementを返す属性 'documentElement'があり、要素には 'innerHTML'プロパティがあります。だから私はこれがうまくいくと思った。 私のための解決策はありますか? –

+0

より良いパッケージを見つけたり、既存のパッケージを改善したりしてください。文書化は必ずしも完全ではありません。 –