diff --git a/modules/angular2/src/compiler/schema/dom_element_schema_registry.ts b/modules/angular2/src/compiler/schema/dom_element_schema_registry.ts
index 84a9230fe3..07e5ad9c90 100644
--- a/modules/angular2/src/compiler/schema/dom_element_schema_registry.ts
+++ b/modules/angular2/src/compiler/schema/dom_element_schema_registry.ts
@@ -6,8 +6,11 @@ import {splitNsName} from 'angular2/src/compiler/html_tags';
import {ElementSchemaRegistry} from './element_schema_registry';
-const NAMESPACE_URIS =
- CONST_EXPR({'xlink': 'http://www.w3.org/1999/xlink', 'svg': 'http://www.w3.org/2000/svg'});
+const NAMESPACE_URIS = CONST_EXPR({
+ 'xlink': 'http://www.w3.org/1999/xlink',
+ 'svg': 'http://www.w3.org/2000/svg',
+ 'xhtml': 'http://www.w3.org/1999/xhtml'
+});
@Injectable()
export class DomElementSchemaRegistry extends ElementSchemaRegistry {
diff --git a/modules/angular2/src/platform/dom/dom_renderer.ts b/modules/angular2/src/platform/dom/dom_renderer.ts
index d64ce1094e..b37be36443 100644
--- a/modules/angular2/src/platform/dom/dom_renderer.ts
+++ b/modules/angular2/src/platform/dom/dom_renderer.ts
@@ -28,8 +28,11 @@ import {ViewEncapsulation} from 'angular2/src/core/metadata';
import {DOM} from 'angular2/src/platform/dom/dom_adapter';
import {camelCaseToDashCase} from './util';
-const NAMESPACE_URIS =
- CONST_EXPR({'xlink': 'http://www.w3.org/1999/xlink', 'svg': 'http://www.w3.org/2000/svg'});
+const NAMESPACE_URIS = CONST_EXPR({
+ 'xlink': 'http://www.w3.org/1999/xlink',
+ 'svg': 'http://www.w3.org/2000/svg',
+ 'xhtml': 'http://www.w3.org/1999/xhtml'
+});
const TEMPLATE_COMMENT_TEXT = 'template bindings={}';
var TEMPLATE_BINDINGS_EXP = /^template bindings=(.*)$/g;
diff --git a/modules/angular2/test/core/linker/integration_spec.ts b/modules/angular2/test/core/linker/integration_spec.ts
index 8318aea3a5..d77bc9d1a6 100644
--- a/modules/angular2/test/core/linker/integration_spec.ts
+++ b/modules/angular2/test/core/linker/integration_spec.ts
@@ -1859,6 +1859,30 @@ function declareTests() {
});
}));
+ it('should support foreignObjects',
+ inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder,
+ async) => {
+ tcb.overrideView(
+ MyComp, new ViewMetadata({
+ template:
+ ''
+ }))
+ .createAsync(MyComp)
+ .then((fixture) => {
+ var el = fixture.debugElement.nativeElement;
+ var svg = DOM.childNodes(el)[0];
+ var foreignObject = DOM.childNodes(svg)[0];
+ var p = DOM.childNodes(foreignObject)[0];
+ expect(DOM.getProperty(svg, 'namespaceURI'))
+ .toEqual('http://www.w3.org/2000/svg');
+ expect(DOM.getProperty(foreignObject, 'namespaceURI'))
+ .toEqual('http://www.w3.org/2000/svg');
+ expect(DOM.getProperty(p, 'namespaceURI'))
+ .toEqual('http://www.w3.org/1999/xhtml');
+
+ async.done();
+ });
+ }));
});
describe('attributes', () => {