Skip to content
This repository was archived by the owner on Feb 22, 2018. It is now read-only.

Commit 5002583

Browse files
committed
fix(resource_url_resolver): fix DOM parsing for Safari
Closes #1439
1 parent 23b2491 commit 5002583

File tree

1 file changed

+21
-4
lines changed

1 file changed

+21
-4
lines changed

lib/core_dom/resource_url_resolver.dart

+21-4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ import 'package:di/annotations.dart';
1515

1616
import 'package:angular/core_dom/type_to_uri_mapper.dart';
1717

18+
class _NullTreeSanitizer implements NodeTreeSanitizer {
19+
void sanitizeTree(dom.Node node) {}
20+
}
21+
1822
@Injectable()
1923
class ResourceUrlResolver {
2024
static final RegExp cssUrlRegexp = new RegExp(r'''(\burl\((?:[\s]+)?)(['"]?)([^]*)(\2(?:[\s]+)?\))''');
@@ -32,14 +36,27 @@ class ResourceUrlResolver {
3236

3337
ResourceUrlResolver(this._uriMapper, this._config);
3438

39+
static 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+
3553
String resolveHtml(String html, [Uri baseUri]) {
3654
if (baseUri == null) {
3755
return html;
3856
}
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;
4360
}
4461

4562
/**

0 commit comments

Comments
 (0)