2013-11-01 1 views
0

Я искал ответ почти неделю, но, прочитав все элементы stackoverflow, я не могу найти решение, которое работает для меня.Расширение Google Chrome: порт: не удалось установить соединение. Окончание приема не существует

ошибка, что я имею: макет

Port: Could not establish connection. Receiving end does not exist. lastError:30 set lastError:30 dispatchOnDisconnect messaging:277 

Папка:

img 
    developer_icon.png 
js 
    sidebar.js 
    main.js 
    jquery-2.0.3.js 
manifest.json 

мой файл manifest.json выглядит примерно так (это версия 2): `

"browser_action": { 
    "default_icon": "./img/developer_icon.png" 
}, 

"content_scripts": [ 
{  
    "matches": ["*://*/*"], 
    "js": ["./js/sidebar.js"], 
    "run_at": "document_end" 
} 
], 

"background" : { 
    "scripts" : ["./js/main.js","./js/jquery-2.0.3.js"] 
}, 

Я хочу обработать пользователя, щелкнув значок расширения, чтобы я мог ввести боковую панель на существующем веб-сайте (b потому что расширение, которое я хотел бы развивать, требует такого объема пространства). Таким образом, в main.js:

chrome.browserAction.onClicked.addListener(function(tab) {   
     chrome.tabs.getSelected(null, function(tab){   
      chrome.tabs.sendMessage(
       //Selected tab id 
       tab.id,       
       //Params inside a object data 
       {callFunction: "toggleSidebar"}, 
       //Optional callback function 
       function(response) { 
        console.log(response); 
       } 
      ); 
     }); 
    }); 

и sidebar.js:

chrome.runtime.onMessage.addListener(function(req,sender,sendResponse){ 
    console.log("sidebar handling request"); 
    toggleSidebar(); 
}); 

, но я никогда не в состоянии увидеть console.log в моей консоли из-за ошибки. Кто-нибудь знает, что я сделал неправильно?

Заранее благодарен!

+0

Вы код работает как ожидалось. Получаете ли вы какое-либо сообщение в журнале веб-страницы. Вы проверили, действительно ли введен сценарий контента? (Обязательно перезагрузите любую открытую страницу после развертывания вашего расширения.) – gkalpak

+0

все идет по плану, но когда я вызываю функцию chrome.tabs.sendMessage (...), возникает ошибка. Где я могу проверить, введен ли сценарий? – tcornelis

+0

Когда ваш контент-скрипт получает сообщение, он печатает что-то на консоли. Итак: 1. Откройте новую вкладку (например, 'www.google.com'). 2. Нажмите кнопку действия браузера для расширения. 3. На открывшейся вкладке нажмите Ctrl + Shilf + I, чтобы открыть консоль разработчика. 4. Если скрипт содержимого вводится и получает сообщение со своей фоновой страницы, вы увидите что-то напечатанное на консоли. BTW, ** chrome.tabs.getSelected ** устарел и бесполезен, так как в любом случае вы выбрали выбранную вкладку из прослушивателя 'onClicked'. – gkalpak

ответ

0

Только для тех, кто посадки на этой странице, сталкиваясь с подобной проблемой: код

OP в это работа, как ожидалось!

Несколько незначительных замечаний:

  1. обратного вызова для chrome.tabs.sendMessage не является обязательным, так что нет никакой необходимости, чтобы определить, если вы не намерены называть его на приемном конце. То есть следующее reduntant:

    ...
    //Optional callback function
    function(response) {
    console.log(response);
    }

  2. chrome.tabs.getSelected Бид устарела и не должна использоваться. Используйте chrome.tabs.query вместо этого.

  3. В данном конкретном случае, вызов chrome.tabs.getSelected является reduntant, так как chrome.browserAction.onClicked обратного вызова передает активную вкладку в качестве аргумента.

Смежные вопросы