Я использую webcomponents.js для полифилла поддержки Firefox веб-компонентов.
При загрузке шаблона HTML посредством импорта HTML сценарий в шаблоне не выполняется, как только настраиваемый элемент, основанный на шаблоне, добавляется в DOM главной страницы.
Он выполняется при запуске сайта в Chrome (который имеет встроенную поддержку веб-компонентов).
Однако и Firefox, и Chrome выполняют такой скрипт, когда шаблон размещается на самой главной странице.
См. пример Эрика Бидельманна на странице HTML5Rocks. Это работает как в Chrome, так и в Firefox (через webcomponents.js) — если шаблон находится в одном HTML-файле.
<!DOCTYPE html>
<html>
<body>
<button onclick="useIt()">Use me</button>
<div id="container"></div>
<script>
function useIt() {
var content = document.querySelector('template').content;
// Update something in the template DOM.
var span = content.querySelector('span');
span.textContent = parseInt(span.textContent) + 1;
document.querySelector('#container').appendChild(
document.importNode(content, true));
}
</script>
<template>
<div>Template used: <span>0</span></div>
<script>alert('Thanks!')</script>
</template>
</body>
</html>
Но хотя отображается текст шаблона, он НЕ запускается при загрузке шаблона и его содержимого через ссылку импорта HTML. Как уже упоминалось, он загружает содержимое, но не выполняет скрипт в Firefox.
Это ошибка в webcomponents.js или ошибка в Firefox? У кого-нибудь есть хорошая идея для обходных путей (кроме «использовать Polymer или Angular»)?
Примечание. Это основано на использовании Firefox 43 и Chrome 47.