Chrome "events" + ООП
пишу расширение для хрома
function Page(port,type,script){ if(!port)throw Error("Bad port to page"); this.port=port; this.type=type; this.script=script; this.tab=port.tab; this.msgTypes=[]; this.addScript=function(script,callback){ chrome.tabs.executeScript(this.tab.id, {"file":script.src}, callback); this.script=script; } this.msg=function(type,data){ this.port.postMessage({"type":type,"data":data}); }; this.addMsg=function (msgType,callback){ msgTypes[msgType]=callback; } this.msgListener=function(obj){ console.log(obj,this); switch(obj.type){ case "pageType": this.type=obj.data; //cpage.type=obj.data; return; break; case "addScript": this.addScript(obj.data); return; break; case "getPrefs": this.msg("prefs",settings[this.script.title]); break; case "setPrefs": settings[this.script.title]=obj.data; break; case "getScripts": this.msg("scripts",scripts); break; } for(var type in msgTypes){ if(type==obj.type){ setTimeout(function(){msgTypes[type](obj.data,this);},2); return; } } } this.port.onMessage.addListener(this.msgListener);//тут this.port.onDisconnect.addListener(function(){ delete this; }); } chrome.extension.onConnect.addListener(function(port) { console.log(port); pages.push(new Page(port)); }); есть массив объектов Page у объекта есть свойство port в свойстве - объект типа Port ему посылается сообщение при этом возникает "событие" надо в обработчике получить доступ к объекту, содержащему port в качестве свойства пытался решить эту проблему вынеся в отд метод - не получилось this всё равно глобал |
Часовой пояс GMT +3, время: 18:55. |