我真的很喜欢使用Angular 4和Chrome扩展程序,但是我有这个代码可以在Angular中使用Chrome扩展程序来管理我的应用程序。
Angular 4中的代码。
public myObjectExtension : any;
public getObjectChrome(){
chrome.runtime.sendMessage(extensionID, 'getObject', function(response) {
console.log(response);
this.myObjectExtension = reponse;
});
}
我在Chrome扩展程序中有这个。
chrome.runtime.onMessageExternal.addListener(
function(request, sender, sendResponse) {
if(request == "getObject"){
sendResponse({
name: "Afro",
lastname: "Chase"
});
}
当我运行应用程序时,控制台日志会正确显示数据,就像这样。
{name: "Afro", lastname: "Chase}
但是当我传递"响应"的值时to" this.myObjectExtension",控制台告诉我这个
TypeError: Cannot set property 'myObjectExtension' of undefined
我认为var" this.myObjectExtension"没有在方法内部定义,但我该如何检索"响应"并将其分配给我的var" this.myObjectExtension"?
答案 0 :(得分:0)
好的,我认为这个问题是重复的。请检查此Scope in chrome message passing,但我不知道如何关闭“完全重复”之类的问题。
我可以回答这个问题,因为Pranoy Sarkar帮助了我。所以答案是这个,在方法
中chrome.runtime.sendMessage(string extensionId, any message, object options, function responseCallback)
范围发生变化,因此要更改像“myObjectExtension”这样的全局变量,我们必须将范围传递给回调。我们可以通过javascript绑定方法来实现,如下所示:
public getObjectChrome(){
let myFoo=function(response){
console.log(response);
this.myObjectExtension = reponse;
}
chrome.runtime.sendMessage(extensionID, 'getObject' myFoo.bind(this));
}
代码就像魅力一样。