我有一段代码,这段代码可以作为Backbone应用程序中路由更改的一部分执行:
mediaMatchUnRegister: function () {
if (this.mediaMatchState.registered) {
enquire.unregister(this.mediaMatchState.tabletAndUpQuery)
.unregister(this.mediaMatchState.mobileQuery);
this.mediaMatchState.registered = false;
}
}
这一切都运行得很好,除非在以下条件下:
如果我没有启动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打印预览对话框是否为红色鲱鱼?
答案 0 :(得分:0)
我有同样的问题。我无法找到合理的解释,因此我只需在致电removeListener()
之前进行检查:
if(this.mql.removeListener)
它远非理想,但至少可以阻止代码破解。