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, время: 05:49. |