пишу расширение для хрома
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 всё равно глобал