Как нацелены события Shadow DOM из-под <content>?

Я пытаюсь понять, как выглядят события, которые происходят в светлом DOM при получении в теневом DOM через<content> элемент. Я читаюТень DOM W3C Draftи я не совсем понимаю, но звучит так, как будто события должны быть «перенаправлены» с точки зрения вложения EventListener.

В случаях, когда путь к событию проходит через несколько деревьев узлов, информация о событии о цели события корректируется для обеспечения инкапсуляции. Ретаргетинг события - это процесс вычисления относительных целей для каждого предка узла, в который отправляется событие. Относительная цель - это узел, который наиболее точно представляет цель отправленного события у данного предка при сохранении инкапсуляции.

а также

Во время отправки события:

Атрибуты Event target и currentTarget должны возвращать относительную цель для узла, на котором вызываются прослушиватели событий.

Итак, вот простой пользовательский элемент Polymer, который просто помещает его дочерние элементы в контейнер и добавляет в контейнер щелчок EventListener (в теневом DOM). В этом случае ребенок - кнопка.

<!DOCTYPE html>
<html>
  <head>
    <script src="bower_components/platform/platform.js"></script>
    <link rel="import" href="bower_components/polymer/polymer.html">
  </head>
  <body unresolved>
    <polymer-element name="foo-bar">
      <template>
        <div id="internal-container" style="background-color:red; width:100%;">
          <content></content>
        </div>
      </template>
      <script>
       Polymer("foo-bar", {
         clickHandler: function(event) {
           console.log(event);
           var element = event.target;
           while (element) {
             console.log(element.tagName, element.id);
             element = element.parentElement;
           }
         },

         ready: function() {
           this.shadowRoot.querySelector('#internal-container').addEventListener('click', this.clickHandler);
         }
       });
      </script>
    </polymer-element>

    <foo-bar id="custom-element">
      <button>Click me</button>
    </foo-bar>
  </body>
</html>

Когда я запускаю это на Chrome 38.0.2075.0 канарейка, когда я нажимаю на кнопку, я получаю:

MouseEvent {dataTransfer: null, toElement: button, fromElement: null, y: 19, x: 53…}altKey: falsebubbles: truebutton: 0cancelBubble: falsecancelable: truecharCode: 0clientX: 53clientY: 19clipboardData: undefinedctrlKey: falsecurrentTarget: nulldataTransfer: nulldefaultPrevented: falsedetail: 1eventPhase: 0fromElement: nullkeyCode: 0layerX: 53layerY: 19metaKey: falsemovementX: 0movementY: 0offsetX: 45offsetY: 10pageX: 53pageY: 19path: NodeList[0]relatedTarget: nullreturnValue: truescreenX: 472screenY: 113shiftKey: falsesrcElement: buttontarget: buttontimeStamp: 1404078533176toElement: buttontype: "click"view: WindowwebkitMovementX: 0webkitMovementY: 0which: 1x: 53y: 19__proto__: MouseEvent test.html:17
BUTTON  test.html:20
FOO-BAR custom-element test.html:20
BODY  test.html:20
HTML  test.html:20

и когда я нажимаю на контейнер, я получаю:

MouseEvent {dataTransfer: null, toElement: div#internal-container, fromElement: null, y: 15, x: 82…} test.html:17
DIV internal-container test.html:20

Таким образом, я получаю цель события в DOM света или тени, в зависимости от того, какой DOMисточник элемент был в. Я ожидал получить цель от теневого DOM в обоих случаях, потому что именно там прикреплен EventListener. Мои вопросы:

Это так, как это должно работать, иЕсли это так, есть ли альтернативный способ получить события, которые всплывают от светлого DOM, перенаправленного на теневой DOM?

В случае, если кто-то хочет спросить: «Что вы пытаетесь сделать?», Я не пытаюсь делать что-то конкретно, кроме понимания поведения.

Ответы на вопрос(1)

Ваш ответ на вопрос