Javascript 如何在Angular 4中从chrome.runtime.sendMessage获取回调?
我对Angular 4和Chrome扩展非常新,但我有这段代码可以在Angular和Chrome扩展中与我的应用程序通信 用角4编码Javascript 如何在Angular 4中从chrome.runtime.sendMessage获取回调?,javascript,angular,google-chrome,google-chrome-extension,google-chrome-devtools,Javascript,Angular,Google Chrome,Google Chrome Extension,Google Chrome Devtools,我对Angular 4和Chrome扩展非常新,但我有这段代码可以在Angular和Chrome扩展中与我的应用程序通信 用角4编码 public myObjectExtension : any; public getObjectChrome(){ chrome.runtime.sendMessage(extensionID, 'getObject', function(response) { console.log(response); this.my
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}
但是,当我将“response”的值传递给“this.myObjectExtension”时,控制台会显示
TypeError: Cannot set property 'myObjectExtension' of undefined
我不理解var“this.myObjectExtension”没有在方法内部定义,但是如何检索“response”并将其分配给我的var“this.myObjectExtension” 好的,我认为这个问题是重复的。检查这个,但我不知道如何结束像“精确复制”这样的问题 我可以回答这个问题,因为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));
}
代码工作起来很有魅力。您需要将您的方法绑定到
this
myFoo=function(abc){console.log(abc);}
将您的方法绑定到myFoo.bind(this)
范围中,现在您可以在方法中访问它,chrome.runtime.sendmage(extensionID,'getObject',myFoo)
我不知道我做得是否正确。查看:myFoo=function(response){console.log(response);this.myObjectExtension=response;}
和public getObjectChrome(){this.myFoo.bind(this);chrome.runtime.sendMessage(extensionID,'getObject',this.myFoo);}
这两个代码都很有效,但我无法评估myObjectExtension的响应值。我发现了这一点,你是对的@Pranoy Sarkar,发布你的答案。