Как заставить Polymer использовать полифилл

Начиная с выпуска Polymer 1.0, я начал получать другой порядок инициализации между Chrome и другими браузерами (Firefox, barebone WebKit). Хотя в документах версии 1.0 говорится , нет никаких гарантий относительно что касается времени инициализации", в версии 0.5 такой проблемы не было.

index.html:

<script src="components/webcomponentsjs/webcomponents.js"></script>
<link rel="import" href="name-tag.html">
<body onload="console.log('body onload');">
  <name-tag></name-tag>
</body>

имя-тег.html:

<link rel="import" href="components/polymer/polymer.html">

<dom-module id="name-tag">
  <template></template>
  <script>
    Polymer({
      is: "name-tag",
      ready: function() {
        console.log("polymer ready");
      }
    });
  </script>
</dom-module>

Chrome 44:

polymer ready
body onload

Firefox 39, QWebView (Qt5.4, WebKit):

body onload
polymer ready

Что я уже пробовал:

  • window.WebComponents = {flags: {register: true, polyfill: true}}; (регистр раньше находился в Polymer)
  • window.Polymer.Settings = {useNativeShadow: false};
  • attached обратный звонок с this.async()

person svlasov    schedule 11.08.2015    source источник


Ответы (1)


window.Polymer.dom = 'shadow' заставляет Polymer использовать теневой DOM по умолчанию (либо полифиллированный, если вы использовали webcomponents.js, либо изначально, если вместо этого вы использовали webcomponents-lite.js).

person Neil John Ramal    schedule 11.08.2015
comment
либо полифиллированный, если вы использовали webcomponents.js — в документации говорится об обратном: 'shadow': локальный DOM отображается с использованием теневого DOM, где это поддерживается. Это означает, что он будет использовать собственную реализацию только там, где это поддерживается. И вот что на самом деле я получаю: Chrome отображает с #shadow-root, а Firefox — нет. - person svlasov; 13.08.2015