0

我试图理解为什么 HTML5 Import 不适用于动态创建的link元素。

第一个例子。它工作正常。

main_page.html:

<head>
    <link rel="import" href="import.html">
</head>
<body>
    <script>
        var imported = document.querySelector('link[rel="import"]').import;
        var el = imported.querySelector('#foo');
        document.body.appendChild(el);
    </script>
</body>

导入.html:

<div id="foo">foo</div>

第二个例子。由于某种原因,它不起作用。

main_page.html:

<body>
    <script>
        var link = document.createElement('link');
        link.rel = 'import';
        link.href = 'import.html';
        document.head.appendChild(link);

        var imported = document.querySelector('link[rel="import"]').import;
        var el = imported.querySelector('#foo');
        document.body.appendChild(el);
    </script>
</body>

导入.html:

<div id="foo">foo</div>

为什么会发生以及如何解决?

4

1 回答 1

1

这会发生,因为link当您调用querySelector('link[rel="import"]').

修复它的一种方法是在使用link.onload. 您甚至可以保存该querySelector调用,这应该会使其更快一些:

 var loadFoo = function(event) {
   var imported = event.target.import;
   var el = imported.querySelector('#foo');
   document.body.appendChild(el);
 }

 var link = document.createElement('link');
 link.rel = 'import';
 link.href = 'import.html';
 link.onload = loadFoo;
 document.head.appendChild(link);

您可以(并且可能应该)添加一个onerror处理程序以在出现问题时运行。

于 2017-02-24T09:43:34.660 回答