弹出窗口中的addListener不能从内容脚本中获取消息/变量数据

时间:2018-07-25 12:52:06

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

我正在使用此

从内容脚本发送jwt变量
iframe.contentWindow.postMessage(JSON.stringify({ data: jwt}), "*");

然后,我正在尝试使用

在popup.js中阅读消息
let token;

var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";


eventer(messageEvent, function (e) {
   let jtoken = JSON.parse(e.data);
    token = jtoken.data;
    console.log(token);
}, false);

function getData() {

    console.log(token);
    // Calling API from here
}

// will call the getdata() function from outside and it should be available
getData();

在同一个popup.js中,我还有另一个使用令牌进行api请求的操作。但是,我在标记变量中变得未定义。但是,当我使用debugger;进行调试时,它会显示令牌值。但是,仅从函数调用并不能获取token变量中的令牌

1 个答案:

答案 0 :(得分:0)

let token;

var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";


eventer(messageEvent, function (e) {
  let jtoken = JSON.parse(e.data);
  token = jtoken.data;
  console.log(token);

  // YOU SHOULD CALL getData() FUNCTION HERE
}, false);

function getData() {

  console.log(token);
  // Calling API from here
}

您应该在getData内部调用eventer函数,因为只有在该函数中设置了令牌后,您才可以使用它。