如何从Angular 4中的chrome.runtime.sendMessage获取回调?

时间:2018-02-20 01:54:03

标签: javascript angular google-chrome google-chrome-extension google-chrome-devtools

我真的很喜欢使用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"?

1 个答案:

答案 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));
}

代码就像魅力一样。