我正在尝试使用将 HTML 文档导入到我的主文档中
<link rel="import" href="my-tabs.html">
但它似乎没有工作。
我正在关注此演示文稿,使用 Chrome 28,并在以下位置启用了这两个标志about:flags
:
Enable experimental WebKit features
Enable experimental JavaScript
我错过了什么吗?还是我需要启用另一个标志才能获得它?
我正在尝试使用将 HTML 文档导入到我的主文档中
<link rel="import" href="my-tabs.html">
但它似乎没有工作。
我正在关注此演示文稿,使用 Chrome 28,并在以下位置启用了这两个标志about:flags
:
Enable experimental WebKit features
Enable experimental JavaScript
我错过了什么吗?还是我需要启用另一个标志才能获得它?
HTML Imports 只能在 Chrome Canary 中本地工作(即使在那里它们也只是半生不熟)。在该演示中,Eric 使用了一个名为Polymer的项目,该项目为 HTML 导入(以及其他内容)提供了一个 polyfill。一探究竟!
更新:目前 HTML 导入的部分实现在 Chrome Canary 中甚至不可用。它的标志设置为仅在测试(而不是构建)时打开它。它甚至还不是一个选择about:flags
。
再次更新:现在. about:flags
它被称为Enable HTML Imports
。不确定它是什么时候出现的。我在 Linux 上的 Chrome 32.0.1671.3 dev 中得到了它。
对于迟到者:
由于对此功能的不确定性,我不推荐使用它。
我的建议:在 html 导入中添加一个 data- 属性。编写一个在所有具有该属性的元素上运行的脚本,并在脚本中使用这些 html 部分fetch()
。创建一个 div 并将获取的导入添加到该 div 的同一位置。本质上,添加一些基于 JS 的后处理,将下载 html 并插入到与导入相同的位置,替换它。
我只是想补充一下,Firefox 中也没有实现,目前正在 https://bugzilla.mozilla.org/show_bug.cgi?id=877072跟踪
在短期内,您必须使用覆盖大多数浏览器的聚合物 polyfill:
<head>
<script src="//cdnjs.cloudflare.com/ajax/libs/polymer/0.3.3/platform.js"></script>
<link rel="import" href="/static/troll.html"/>
</head>
HTML Imports 仅适用于Chrome 36-72,它已被弃用并删除。
Shadow DOM V0、Custom Elements V0 和 HTML Imports 于 2014 年推出,但并未被其他浏览器引擎采用。相反,Shadow DOM V1、Custom Elements V1 和 ES 模块被当今各种浏览器引擎广泛采用。Chrome 在 2016 年发布了 Shadow DOM V1 / Custom Elements V1,在 2017 年发布了 ES 模块。
有关更多信息,请参阅,
iOS 和 Android 仍不支持,Firefox 仍不支持(截至 10 月 -15 日)。
HTML Imports 已经登陆一些现代浏览器。因此,如果您想实现现代技术,那么您只需编写几行代码即可:
<link rel="import" href="import.html" onload="handleLoad(event)" onerror="handleError(event)">
onload
并且onerror
用于记录页面的状态。(如果导入页面已加载或未加载。)
我已将导入页面 ( import.html
) 包装到<template>
标记中以将其克隆到 Javascript 变量中。
导入.html:
<template>
<h1>Hi there!</h1>
<h2>To use html-imports..</h2>
<h3>In Chrome 35 and below(in which you found the flag) you've to enable the flag: <span style="color: brown;">chrome://flags/#enable-html-imports</span></h3>
<h3>In Chrome 36 and Opera 23, it's supported by default. </h3>
</template>
您必须使用 Javascript 才能使用导入的页面
// Thanks to http://www.html5rocks.com/en/tutorials/webcomponents/imports/
var link = document.querySelector('link[rel="import"]');
// Clone the <template> in the import.
var template = link.import.querySelector('template');
var clone = document.importNode(template.content, true);
document.querySelector('#getting-started-info').appendChild(clone);
function handleLoad(e) {
console.log('Loaded import: ' + e.target.href);
}
function handleError(e) {
console.log('Error loading import: ' + e.target.href);
}
变量link
用于获取导入元素。
变量template
用于<template>
从import.html
.
变量clone
用于获取<template>
in的内容import.html
。
然后我尝试将内容附加到<div>
.
handleLoad
并handleError
用于通过控制台通知导入页面的状态,该页面应在许多浏览器中显示DevTools
。
我在这里写了一篇文章。
并在 github.com/krman009/html-imports 在 Github 中创建了一个存储库。
html5rocks 文章。
我希望这会对你有所帮助。