0

Content.js

in callback function we will get some link from chrome storage.

 function GetFilterfromStore(callback, docu) {
        chrome.storage.sync.get("fiterlink", function (data) {
            callback(data, docu);
        });
    };


function DOMtoString(data,document_root) {
    debugger;
    try {
        alert(data.fiterlink[0].data.link);
        alert(document_root);
        var number = 0;
        var linknumber=0;
        var listoflinks = [];
        var linkname = '';
        var links =[data.fiterlink[0].data.link,data.fiterlink[1].data.link]
        var html = '',
        node = document_root.getElementsByTagName("a");
        for (var i = 0; i < links.length; i++)
        {
            number = 0;
            var temparray = [];
            var heightarray=[];
            var widtharray = [];
            for (var j = 0; j < node.length; j++)
            {

                if (node[j].getAttribute("href") != null)
                {
                    if (node[j].getAttribute("href").indexOf(links[i]) != -1)
                    {
                        linknumber++;
                        linkname = '';
                        linkname = links[i];
                        height = node[j].parentElement.parentElement.parentElement.parentElement.parentElement.offsetHeight;
                        width = node[j].parentElement.parentElement.parentElement.parentElement.parentElement.offsetWidth;
                        var elementdata = node[j].innerHTML;
                        var nodediv=node[j].getElementsByTagName("div");
                        var checknumber=0;
                        for(var k=0;k<nodediv.length;k++)
                        {

                            var clas = nodediv[k].getAttribute('class');
                            if(clas=="ebayextension")
                            {
                                checknumber++;
                            }
                        }
                        if (checknumber == 0) {

                            node[j].innerHTML = "<div class=\"ebayextension\" style=\"background-color: #00BFFF;color: black;\">" + elementdata + "</div><sup><b>" + linknumber + "</b></sup>";
                        }
                        heightarray[number] = { h: height };
                        widtharray[number] = { w: width };
                        temparray[number] = { linkname: node[j].getAttribute("href") };
                        number++;
                    }
                }
            }

            listoflinks.push({
                filterlink: linkname,
                filteredlink: temparray,
                heightarray: heightarray,
                widtharray: widtharray
            })

            }
    }
    catch (ex) {
        alert(ex);
    }
    debugger;
    return listoflinks;
}


chrome.runtime.sendMessage({
    action: "getSource",
    source: GetFilterfromStore(DOMtoString,document),
});

Popup.js

function onPageDetailsReceived(pageDetails) {
    debugger;
    if (pageDetails.action == "getSource") {
        var html = '';

        for (var i = 0; i < pageDetails.source.length; i++)
        {
            //alert(pageDetails.source.length);
            var counter = 1;
            alert(pageDetails.source[i].filterlink);
            html += "</br></br><div><b>" + pageDetails.source[i].filterlink + "</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + pageDetails.source[i].filteredlink.length + "</div></br></br>"
            for (var j = 0; j < pageDetails.source[i].filteredlink.length; j++)
            {
                var campid = getParameterByName('campid', pageDetails.source[i].filteredlink[j].linkname);
                var pubid = getParameterByName('pub', pageDetails.source[i].filteredlink[j].linkname);
                if (pubid == null)
                {
                    pubid = "not available";
                }
                html += "<b>" + counter + ").</b><a href=\""
                html += pageDetails.source[i].filteredlink[j].linkname;
                html += "\">" + pageDetails.source[i].filteredlink[j].linkname + "</a><br/>"
                html += "\n";
                html += "<b>CAMPID=" + campid + "</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp<b>PUBID=" + pubid + "</b>";
                html += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp<b>Size=" + pageDetails.source[i].heightarray[j].h + "*" + pageDetails.source[i].widtharray[j].w + "</b>";
                html += "\n";
                counter++;
            }   
        }
        document.getElementById('message').innerHTML = html;
    }
}

I need to get return data in popup.js and show it on my chrome extension.but i am not able to return data from DOMtoString(data,document_root) to source in chrome.runtime.sendMessage . please help me out if somebody know that how to return data from a callback function to a variable so you can also help me.

anshul
  • 31
  • 5
  • I somebody have any query then please ask me – anshul Nov 20 '17 at 05:46
  • No its not working in my case – anshul Nov 20 '17 at 06:27
  • chrome.storage is asynchronous so DOMtoString is executed much later than your chrome.runtime.sendMessage runs, so you need to move it inside DOMtoString and use it instead of `return listoflinks;` – wOxxOm Nov 20 '17 at 07:38
  • If you don't mind can you give me a example by a function. Because i need to use web page document element in DOMtostring method. – anshul Nov 20 '17 at 08:57
  • grr, simply reverse the order: 1. remove chrome.runtime.sendMessage line 2. GetFilterfromStore(DOMtoString, document) 3. put chrome.runtime.sendMessage({action: "getSource", source: listoflinks}); at the end of DOMtoString function 4. read some tutorials on async code with better examples or explanations – wOxxOm Nov 20 '17 at 10:50

0 Answers0