我正在使用Marionette制作Chrome扩展程序。该应用程序已在后台页面中定义并运行。弹出页面添加了弹出模块
var App = chrome.extension.getBackgroundPage().App;
App.module("Popup", function (Popup) {
...
Popup.on("start", function () { console.log(window); });
}
模块在页面加载后启动,并在页面卸载后停止。
document.addEventListener("DOMContentLoaded", function () {
App.module("Popup").start();
});
window.addEventListener("unload", function () {
App.module("Popup").stop();
});
问题是模块附加到后台页面中的应用程序,因此每次打开弹出窗口后,都会调用此模块定义并将新的start
事件处理程序附加到现有模块。显然,模块启动时会调用所有处理程序。显然,我只能为第一个弹出窗口调用模块定义。但是start
处理程序与当前window
相关联,因此console.log(window)
为先前弹出窗口中附加的null
处理程序打印start
,并且{&1;}我想分开那些处理程序。
PS。如果它有任何重要性,实际问题就在
中发生Popup.on("start", function () { Backbone.history.start(); });
即在Backbone.history.getHash()
中var match = (window || this).location.href.match(/#(.*)$/);
Uncaught TypeError: Cannot read property 'match' of undefined