Chrome Ошибка расширения «Попытка использовать отключенный объект порта» - PullRequest
0 голосов
/ 24 апреля 2020

Я пишу расширение Chrome, которое может скопировать определенные части страницы и отправить его на мой сервер.

По состоянию на вчера мой код работал просто отлично, но сегодня, когда я продолжал кодировать, я мгновенно получено сообщение об ошибке, указанное в заголовке.

Мой логин. js файл отправляет значение полей формы в фоновый режим. js файл, который обрабатывает данные в go.

вход в систему. js

document.addEventListener('DOMContentLoaded', function() {
    if ($.cookie('token')){
      window.location.href = "../templates/work_selection.html";
    }
    var checkPageButton = document.getElementById('loginbtn');
    checkPageButton.addEventListener('click', function() {     
      var login_data = `{"username":"${document.getElementById('email').value}", "password" : "${document.getElementById('password').value}", "expireTime" : "5000" }`
      var login_json = JSON.stringify(login_data)
      var jwt_msg = chrome.runtime.connect({name:'login_msg'});
      jwt_msg.postMessage({login_data:login_json});
      jwt_msg.onMessage.addListener(function(msg) {
        console.log(msg)
        if(msg.token){
          window.location.href = "../templates/work_selection.html";
        }
        if(msg.message){
          $('#login-error').append(msg.message);
        }
      });
    }, false);
  }, false);

Все выполняется в порядке исключения до того момента, когда я пытаюсь отправить обратно данные, на которые мой сервер отвечает.

ошибка происходит в if(recieved_data.name === 'login_msg')

это мой фон. js файл

chrome.runtime.onInstalled.addListener(() => {
    chrome.contextMenus.create({
      id: 'quote',
      title: 'Create quote',
      contexts: ['selection']  
    });
    chrome.contextMenus.create({
        id: 'source',
        title: 'Create source',
        contexts: ['page']  
      });
  });

  chrome.contextMenus.onClicked.addListener((info, tab) => {
    if (info.menuItemId === 'quote') {
      chrome.tabs.sendMessage(tab.id, { text: 'quote' }, (res) => {
      });
    }
    if (info.menuItemId === 'source') {
        chrome.tabs.sendMessage(tab.id, { text: 'source' }, (res) => {
        });
      }
  });

  chrome.runtime.onConnect.addListener(function(recieved_data){
      if(recieved_data.name === 'create_quote'){
        recieved_data.onMessage.addListener(function(msg){
          sendQuote(d=msg.quote).done(function(data){
            recieved_data.postMessage(data);
           });
      });}
      if(recieved_data.name === 'create_source'){
        recieved_data.onMessage.addListener(function(msg){
          sendQuote(d=msg.source).done(function(data){
            get_selected_work()
            recieved_data.postMessage(data);
           });
        });
      }
      if(recieved_data.name === 'login_msg'){
        var date = new Date();
        recieved_data.onMessage.addListener(function(msg){
          date.setTime(date.getTime() + 86340000);  
          logIn(d=msg.login_data).done(function(data){
            $.cookie("token", data.token, {expires:date})
            jwt_token = data.token;
            recieved_data.postMessage(data);
           }).fail(function(data){
            recieved_data.postMessage(data);
           });
          return true
        });
      }
      if(recieved_data.name === 'get_works'){
        recieved_data.onMessage.addListener(function(msg){
          get_work().done(function(data){
            recieved_data.postMessage(data);
           });
        });
      };
  });

и мои запросы. js файл

var jwt_token;

function logIn(d){
  return $.get({
    url:'http://127.0.0.1:5000/login',
    type:'POST',
    data: d,
    headers:{"Content-Type":"application/json"},
    dataType: "json"
  })
};

function sendQuote(d){
  return $.get({
      url:'http://127.0.0.1:5000/snippet',
      type:'POST',
      data: d,
      headers:{"Content-Type":"application/json","authorization": `${$.cookie('token')}`, "workUuid":`${$.cookie('work_selection')}`},
      dataType: "json"
    })
};

function sendSource(d){
  return $.get({
    url:'http://127.0.0.1:5000/snippet',
    type:'POST',
    data: d,
    headers:{"Content-Type":"application/json","authorization": `${$.cookie('token')}`},
    dataType: "json"
  })
}; 

function get_work(){
return $.get({
  url:'http://127.0.0.1:5000/work',
  type:'GET',
  headers:{"Content-Type":"application/json", "authorization": `${$.cookie('token')}`},
  dataType: "json"
})
}; 

Чего мне не хватает?

Я уже пытался "вернуть true" из-за запроса ajax. Но это не помогает.

Изменение имени порта и т. Д. Ничего не дает.

Каждый другой порт работает нормально, а postMessage отправляет данные JSON, как и предполагалось.

...