您似乎正在尝试创建自定义元素,但尚未注册。创建你自己的 XFoo 元素看起来像这样:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>My Custom Element</title>
</head>
<body>
<!-- Create a template for the content inside your element -->
<template>
<h1>Hello from XFoo</h1>
</template>
<!-- Register your new element -->
<script>
var tmpl = document.querySelector('template');
var XFooProto = Object.create(HTMLElement.prototype);
XFooProto.createdCallback = function() {
var root = this.createShadowRoot();
root.appendChild(document.importNode(tmpl.content, true));
};
var XFoo = document.registerElement('x-foo', {
prototype: XFooProto
});
</script>
<!-- Use the element you've just registered as a tag -->
<x-foo></x-foo>
<!-- OR, create an instance using JavaScript -->
<script>
var el = document.createElement('x-foo');
document.body.appendChild(el);
</script>
</body>
</html>
不幸的是,这种方法依赖于当前仅在 Chrome 34 中提供的本机 API。正如其他人所提到的,创建自己的自定义元素的更简单的方法是使用Polymer。Polymer 是一个库,可为所有现代浏览器添加对 Web 组件(本质上是您要构建的内容)的支持。这包括 IE 10+、Safari 6+、Mobile Safari、当前的 Chrome 和当前的 Firefox。
我整理了一个 jsbin,它展示了如何使用 Polymer 创建自己的x-foo
元素。