@@ -15,6 +15,10 @@ import 'package:di/annotations.dart';
15
15
16
16
import 'package:angular/core_dom/type_to_uri_mapper.dart' ;
17
17
18
+ class _NullTreeSanitizer implements NodeTreeSanitizer {
19
+ void sanitizeTree (dom.Node node) {}
20
+ }
21
+
18
22
@Injectable ()
19
23
class ResourceUrlResolver {
20
24
static final RegExp cssUrlRegexp = new RegExp (r'''(\burl\((?:[\s]+)?)(['"]?)([^]*)(\2(?:[\s]+)?\))''' );
@@ -32,14 +36,27 @@ class ResourceUrlResolver {
32
36
33
37
ResourceUrlResolver (this ._uriMapper, this ._config);
34
38
39
+ final NodeTreeSanitizer _nullTreeSanitizer - new _NullTreeSanitizer ();
40
+
41
+ static Node _parseHtmlString (String html) {
42
+ HtmlDocument doc = new DomParser ().parseFromString (
43
+ "<!doctype html><html><body>$html </body></html>" , "text/html" );
44
+ if (doc != null ) {
45
+ return doc.body;
46
+ }
47
+ // Workaround for Safari (can't parse HTML documents via the DomParser)
48
+ doc = document.implementation.createHtmlDocument ("" );
49
+ doc.body.setInnerHtml (html, treeSanitizer: _nullTreeSanitizer);
50
+ return doc.body;
51
+ }
52
+
35
53
String resolveHtml (String html, [Uri baseUri]) {
36
54
if (baseUri == null ) {
37
55
return html;
38
56
}
39
- HtmlDocument document = new DomParser ().parseFromString (
40
- "<!doctype html><html><body>$html </body></html>" , "text/html" );
41
- _resolveDom (document.body, baseUri);
42
- return document.body.innerHtml;
57
+ Node node = _parseHtmlString (html);
58
+ _resolveDom (node, baseUri);
59
+ return node.innerHtml;
43
60
}
44
61
45
62
/**
0 commit comments