React window.addeventlistener不起作用

问题描述 投票:1回答:1

我正在尝试将Spotify身份验证添加到单页应用程序。

这是我的按钮单击处理程序事件。

 var CLIENT_ID = '****';
  var REDIRECT_URI = window.location.href;
  function getLoginURL(scopes) {
    return 'https://accounts.spotify.com/authorize?client_id=' + CLIENT_ID +
      '&redirect_uri=' + encodeURIComponent(REDIRECT_URI) +
      '&scope=' + encodeURIComponent(scopes.join(' ')) +
      '&response_type=token';
  }
  var url = getLoginURL([
    'user-read-email',
    'user-read-birthdate',
    'user-read-private',
    'user-library-modify',
    'user-library-read',
    'user-follow-read',
    'user-follow-modify',
    'streaming',
    'playlist-modify-private',
    'playlist-modify-public',
    'playlist-read-collaborative',
    'playlist-read-private'
  ]);

  var width = 450,
    height = 730,
    left = (window.screen.width / 2) - (width / 2),
    top = (window.screen.height / 2) - (height / 2);


  window.open(url,
    'Spotify',
    'menubar=no,location=no,resizable=no,scrollbars=no,status=no, width=' + width + ', height=' + height + ', top=' + top + ', left=' + left
  );

  console.log("window is open");

  });

执行身份验证时将可以正常工作window.addEventListener('message')

这里是事件侦听器:

 componentDidMount() {
window.addEventListener('message', (event) => {
  ***console.log("Spotify Window sent event data.");
  var hash = JSON.parse(event.data);
  if (hash.type == 'access_token') {
    console.log(hash.access_token);
  }
}); }

但是它不起作用。这里的问题在哪里?标有***的部分甚至无效。

通过我使用本文档的方式:http://jsfiddle.net/JMPerez/62wafrm7/

javascript reactjs single-page-application
1个回答
1
投票

[由于Spotify正在重定向回到您的页面,因此,在挂载组件之前会触发该事件,这意味着该窗口没有在监听它。

[我会考虑将您的window.addEventListener()代码移到任何组件之外的index.js文件中。

© www.soinside.com 2019 - 2024. All rights reserved.