8

Opracowuję rozszerzenie, w którym muszę wyodrębnić dane z odnośnej strony profilu po naciśnięciu przycisku użytkownika na wyskakującym okienku. I, przekazuję wiadomość ze strony popup.js do spisu treści iw odpowiedzi otrzymam dane wyodrębnione z linkedin strony profilu przez contentscript, dzięki czemu mogę wyświetlić go w popup.html. Ale ja dostaję błąd podczas sprawdzania popup.html. Błąd jest:Rozszerzenie chrome to Send Message from popup to content script

Port: Could not establish connection. Receiving end does not exist. lastError:29 
Error in event handler for 'undefined': Cannot read property 'farewell' of undefined 
TypeError: Cannot read property 'farewell' of undefined 
    at chrome-extension://kdfgoafjicddfffdbfofdmckejemfije/popup.js:6:25 
    at <error: illegal access> 
    at Event.dispatchToListener (event_bindings:356:21) 
    at Event.dispatch_ (event_bindings:342:27) 
    at Event.dispatch (event_bindings:362:17) 
    at Object.chromeHidden.Port.dispatchOnDisconnect (miscellaneous_bindings:258:27) 

Dla porównania, mój plik manifestu jest:

{ 
    "name": "SoftwareGrid", 
    "version": "0.5", 
    "icons": { "16": "icons/16.png","48": "icons/48.png", "128": "icons/128.png" }, 
    "description": "Shows user cresidentials on Linkedin", 
    "permissions": [ 
     "cookies", 
     "tabs", 
     "http://www.linkedin.com/*" 
    ], 

    "browser_action": { 
     "default_title": "Show Profile", 
     "default_icon": { "16": "icons/16.png","48": "icons/48.png", "128": "icons/128.png" }, 
     "default_popup": "popup.html" 
    }, 

    "background": { 
     "scripts": ["jquery-1.7.2.min.js","background.js"] 
    }, 

    "content_scripts": [{ 
     "matches": ["http://www.linkedin.com/*"], 
     "all_frames": true, 
     "js": ["jquery-1.7.2.min.js", "script.js"], 
     "run_at": "document_end" 
    }], 

    "web_accessible_resources": [ 
     "icons/i1.png" 
    ], 

    "manifest_version": 2 
} 

Mój plik popup.js:

function sendClicks() { 
    console.log("popup.js > sendClicks()"); 

    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 
     chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) { 
      console.log(response.farewell); 
     }); 
    }); 

    console.log("avra' inviato?"); 
} 

$(function() { 
    console.log("popup.js > OMD Extension ready"); 
    $('#sendclicks').click(function(){ 
     sendClicks(); 
    }); 
}); 

Mój plik contentscript

chrome.runtime.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"}); 
}); 

Pomoc Plz!

+1

To działa na mnie. Może popełniłeś błąd podczas debugowania i zmieniłeś zakładkę? Jeśli używasz 'chrome.tabs.query ({active: true, currentWindow: true}, ...' ta karta musi być otwarta i aktywna podczas debugowania, w przeciwnym razie detektor na 'script.js' nie jest wywoływany –

+0

Dzięki za pomoc, ale byłem głupi, ponieważ wystąpił błąd w moim tekście treści – saadsaf

+3

Jaki był błąd w twoim tekście treści? Czy możesz umieścić poprawny plik jako odpowiedź? – makenova

Odpowiedz

3

Być może trzeba będzie dodać ten w swoim manifeście:

"permissions" : ["tabs"] 
Powiązane problemy