Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Angular 4中从chrome.runtime.sendMessage获取回调?_Javascript_Angular_Google Chrome_Google Chrome Extension_Google Chrome Devtools - Fatal编程技术网

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

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

我对Angular 4和Chrome扩展非常新,但我有这段代码可以在Angular和Chrome扩展中与我的应用程序通信

用角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}
但是,当我将“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,发布你的答案。