chrome extension to Send Message from popup to content script
Asked Answered
G

1

9

I,am developing an extension in which i have to extract data from linkedin profile page when user press button on popup. I,am passing message from the popup.js page to contentscript and in response i will get data extracted from linkedin profile page by contentscript so that i can display it in popup.html. But I,am getting error when i inspected the popup.html. The error is:

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)

For reference, my manifest file is:

{
    "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
}

My popup.js file:

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();
    });
});

My contentscript file

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

Plz help!

Global answered 5/10, 2013 at 12:11 Comment(4)
It works for me. Maybe you have done error on debug and you have changed your tab? If you are using chrome.tabs.query({active: true, currentWindow: true}, ... this tab have to be open and active while you are debugging, otherwise listener on script.js isn't called.Regnant
Thanks for the help, but i was stupid as there was an error in my content scriptGlobal
What was the error in your content script? Can you put the correct file as an answer?Nakano
This question is hanging in popular unanswered questions for [google-chrome-extension] tag. Since this question is, essentially, answered - please either post and accept an answer, or delete the question if you feel it's not worth keeping.Avraham
A
3

You may have to add this in your manifest:

"permissions" : ["tabs"]
Abseil answered 4/6, 2014 at 22:25 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.