查询.js和 Chrome 打印对话框 issu



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

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

除了在以下条件下,这一切都运行良好:

  1. 应用正在 Chrome 中运行
  2. 我单击了该页面上的"打印"按钮,该按钮打开了Chrome打印预览对话框。

如果我还没有打开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 打印预览对话框是红鲱鱼吗?

我有同样的问题。我找不到合理的解释,所以我只是在打电话给removeListener()之前检查一下:

if(this.mql.removeListener)

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

最新更新