Polymer 自定义元素数据集在 Firefox 中为空

Polymer Custom elements dataset is empty in Firefox

我的印象是 Firefox "clearing" 自定义元素的 data-* 属性。

请参阅下面的脚本在 Chrome 中使用本机 Web 组件支持,但在 Firefox 中,似乎一旦我的点击事件处理程序是 运行,数据集就为空。

document.addEventListener('DOMContentLoaded', function() {
    var popups = document.querySelectorAll('iron-image[data-popup]');
    for (var i=0; i < popups.length; i++) {
        var img = popups[i];
        console.log(img.dataset.popup);   // <--- this works

        img.addEventListener('click', function(ev) {
            var app = document.querySelector('sh-app');
            app.showPopup(ev.target.dataset.popup);  // <-- This fails, dataset is empty
        });
    }
});

旁注:我也尝试过 WebComponentsReady 事件,但由于某种原因它根本没有被触发。

有没有人运行以前遇到过这个问题并了解原因? 这是 Polymer(<iron-image> 在这种情况下)、Web Components polyfills 或 Firefox 的实现中的错误吗?

Event retargeting

基本上,您必须使用 Polymer.dom 包装事件以使其正常化。

document.addEventListener('DOMContentLoaded', function() {
    var popups = document.querySelectorAll('iron-image[data-popup]');
    for (var i=0; i < popups.length; i++) {
        var img = popups[i];
        console.log(img.dataset.popup);   // <--- this works

        img.addEventListener('click', function(ev) {
            var app = document.querySelector('sh-app');
            var event = Polymer.dom(ev); // you wrap the event using Polymer.dom
            app.showPopup(event.localTarget.dataset.popup);  // instead of target you should use localTarget
       });
   }
});