enquire.js和Chrome打印对话框问题

时间:2015-01-05 01:14:45

标签: javascript google-chrome backbone.js media-queries enquire.js

我有一段代码,这段代码可以作为Backbone应用程序中路由更改的一部分执行:

mediaMatchUnRegister: function () {
            if (this.mediaMatchState.registered) {
                enquire.unregister(this.mediaMatchState.tabletAndUpQuery)
                        .unregister(this.mediaMatchState.mobileQuery);
                this.mediaMatchState.registered = false;
            }
        }

这一切都运行得很好,除非在以下条件下:

  1. 应用已在Chrome中运行
  2. 我点击了该页面上的“打印”按钮,该按钮显示了Chrome打印预览对话框。
  3. 如果我没有启动Chrome打印预览对话框,那么它运行得很好。 FF和IE,没有这个对话,没有任何问题。

    问题出在enquire.js,特别是clear()方法:

    clear : function() {
                    each(this.handlers, function(handler) {
                        handler.destroy();
                    });
                    this.mql.removeListener(this.listener);
                    this.handlers.length = 0; //clear array
                },
    

    如果我没有触发打印预览对话框this.mql,则为MediaQueryList。如果我已触发它,则this.mql现在为MediaQueryListEvent。然后失败,因为该对象似乎没有removeListener方法。

    还有其他人遇到过这个吗? Chrome打印预览对话框是否为红色鲱鱼?

1 个答案:

答案 0 :(得分:0)

我有同样的问题。我无法找到合理的解释,因此我只需在致电removeListener()之前进行检查:

if(this.mql.removeListener)

它远非理想,但至少可以阻止代码破解。