2013-02-12 2 views
-1

Я пишу chrome extension, и я пытаюсь отправить сообщение между фоновыми страницами и страницами контента.Не удается установить соединение между фоновой страницей и страницей контента

Проблема в том, что соединение никогда не установлено. Я даже скопировал код из документации Google, но безрезультатно.

Вот мой манифест страницы

{ 
    "name": "x", 
    "description": "x", 
    "version": "0.1", 
    "permissions": ["contextMenus", "tabs", "notifications"], 
    "content_scripts": [ 
    { 
     "matches": ["http://*/*","https://*/*"], 
     "js": ["jquery.js", "content_script.js"] 
    } 
    ], 
    "background": { 
    "scripts": ["sample.js"] 
    }, 
    "manifest_version": 2 
} 

Мой фон страницы

function genericOnClick(info, tab) 
{ 
     //copy pasted from google tutorials. My own code also didn't work 
     chrome.tabs.getSelected(null, function(tab) { 
    chrome.tabs.sendMessage(tab.id, {greeting: "hello"}, function(response) { 
    console.log(response.farewell); 
    }); 
}); 


} 



// Create a parent item and two children. 
var parent1 = chrome.contextMenus.create({"title": "Rank Trigger", "contexts":["all"]}); 

var child1 = chrome.contextMenus.create 
(
    {"title": "Rank 1", "contexts":["all"], "parentId": parent1, "onclick": genericOnClick} 
); 
var child2 = chrome.contextMenus.create 
(
    {"title": "Rank 2", "contexts":["all"], "parentId": parent1, "onclick": genericOnClick} 
); 
var child2 = chrome.contextMenus.create 
(
    {"title": "Rank 3", "contexts":["all"], "parentId": parent1, "onclick": genericOnClick} 
); 

Содержание сценария:

//copied from google tutorials 
chrome.extension.onMessage.addListener(
    function(request, sender, sendResponse) { 
    console.log(sender.tab ? 
       "from a content script:" + sender.tab.url : 
       "from the extension"); 
    if (request.greeting == "hello") 
     sendResponse({farewell: "goodbye"}); 
    }); 

Любые идеи, пожалуйста? Может быть, потому что событие запускается из контекстного меню, но я не уверен. Я новичок в программировании JS и chrome.

Благодаря

+0

'genericOnClick (е)' проходит объект события как 'é', правильно? Поэтому вам нужно «e.target», или я ошибаюсь? –

+0

Опечатка, которую я написал при редактировании кода после отправки его здесь ... оба являются «событиями» в моем коде. :) – r3x

+0

Вы должны показать код, который вы используете, чтобы установить обработчик –

ответ

0

Оказывается, мой код работал должным образом, и сообщения действительно отправили каждый onClick. Проблема заключалась в том, что я тестировал ее на неправильной странице, на которой не был введен контент-текст.

Тупой ошибка с моей стороны ... Спасибо всем за помощь

1

Настройка onclick обработчика на элементе, а затем использовать event.currentTarget.outerHTML, чтобы получить HTML из щелкнутого элемента.

+0

Получил следующую ошибку, мне нужно «#include» что-нибудь? Ошибка в обработчике события «contextMenus»: Не удается прочитать свойство «outerHTML» неопределенной TypeError: Не удается прочитать свойство «outerHTML» неопределенной в genericOnClick (хром расширение: //inhjfhckdfpegapembanojbhadkkkdme/sample.js: 5: 30) на contextMenus: 42: 17 в chrome.Event.dispatchToListener (event_bindings: 387: 21) в chrome.Event.dispatch_ (event_bindings: 373: 27) в dispatchArgs (event_bindings: 249: 22) в Object.chromeHidden. Event.dispatchEvent (event_bindings: 257: 7) – r3x

+0

Это означает, что вы неправильно ссылаетесь на элемент. Когда вы вызываете функцию onclick, возьмите объект события, который передан в функцию, и посмотрите, имеет ли он определенное свойство currentTarget. Это свойство currentTarget должно быть ссылкой на нужный элемент ... – kinsho

+0

Я думаю, что проблема заключается в отправке сообщений с фоновой страницы на страницу содержимого. Я снова отредактировал вопрос, чтобы сделать его менее локализованным. – r3x