Message passing with nested async call in chrome extension failsChrome tab.create and tab.getSelectedBackground to content-script of preloading page message failsVariables temporarily undefined outside of chrome.extension.sendMessage callback functionChrome Extension Message passing: response not sentDart chrome extension: How to send a response in onMessage?Message passing with chrome.downloadsChrome extension message passing from popup to contentChrome extension: sendMessage from content to background getting response from popupchrome.runtime.onMessage response with async awaitSend message from content script to another

Mage Armor with Defense fighting style (for Adventurers League bladeslinger)

I’m planning on buying a laser printer but concerned about the life cycle of toner in the machine

What are these boxed doors outside store fronts in New York?

Dragon forelimb placement

Can divisibility rules for digits be generalized to sum of digits

How does one intimidate enemies without having the capacity for violence?

To string or not to string

What do you call a Matrix-like slowdown and camera movement effect?

The use of multiple foreign keys on same column in SQL Server

What does it mean to describe someone as a butt steak?

How is the claim "I am in New York only if I am in America" the same as "If I am in New York, then I am in America?

Has the BBC provided arguments for saying Brexit being cancelled is unlikely?

Is it unprofessional to ask if a job posting on GlassDoor is real?

Arthur Somervell: 1000 Exercises - Meaning of this notation

Why are 150k or 200k jobs considered good when there are 300k+ births a month?

In Japanese, what’s the difference between “Tonari ni” (となりに) and “Tsugi” (つぎ)? When would you use one over the other?

What typically incentivizes a professor to change jobs to a lower ranking university?

Show that if two triangles built on parallel lines, with equal bases have the same perimeter only if they are congruent.

Are the number of citations and number of published articles the most important criteria for a tenure promotion?

How can bays and straits be determined in a procedurally generated map?

Modeling an IPv4 Address

How to write a macro that is braces sensitive?

Font hinting is lost in Chrome-like browsers (for some languages )

"You are your self first supporter", a more proper way to say it



Message passing with nested async call in chrome extension fails


Chrome tab.create and tab.getSelectedBackground to content-script of preloading page message failsVariables temporarily undefined outside of chrome.extension.sendMessage callback functionChrome Extension Message passing: response not sentDart chrome extension: How to send a response in onMessage?Message passing with chrome.downloadsChrome extension message passing from popup to contentChrome extension: sendMessage from content to background getting response from popupchrome.runtime.onMessage response with async awaitSend message from content script to another






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








0















This works: Simple message passing with no nested call to chrome API in the onMessage listener.



content_script



chrome.runtime.sendMessage( message: "what is my windowId?" , function(response) 
// clearLocalStorage(response.allWindowsId);
windowId = response.windowId;
console.log(windowId);
);


background_script



chrome.runtime.onMessage.addListener(function(request, sender,sendResponse) 
if (request.message === "buttonClick")
chrome.tabs.reload(sender.tab.id);
sendResponse(message: 'handle button click');
else if (request.message === "what is my windowId?")
sendResponse(
windowId: sender.tab.windowId
);

return;
);


This doesnot work: Nested call chrome.windows.getAll in the onMessage listener.



background_script



chrome.runtime.onMessage.addListener(function(request, sender,sendResponse) 
if (request.message === "buttonClick")
chrome.tabs.reload(sender.tab.id);
sendResponse(message: 'handle button click');
else if (request.message === "what is my windowId?")
// additional code here
chrome.windows.getAll(function(windows)
sendResponse(
windowId: sender.tab.windowId,
windows: windows
);
);

return;
);


I've also tried to make the call chrome.windows.getAll async using chromeExtensionAsync, but no luck yet.



The following is the error message. It seems that the call to window.getAll happens after the function onMessage returns, even though I've marked this function async by the final return; statement.



Error handling response: TypeError: Cannot read property 'windowId' of undefined

Unchecked runtime.lastError: The message port closed before a response was received.









share|improve this question

















  • 1





    There's an official trick: move return into the else branch before } and make it return true. See Chrome Extension Message passing: response not sent

    – wOxxOm
    Mar 8 at 4:12












  • Solved! It could be solved without move return elsewhere. Making it return true; is enough to solve it.

    – Cảnh Toàn Nguyễn
    Mar 8 at 5:19


















0















This works: Simple message passing with no nested call to chrome API in the onMessage listener.



content_script



chrome.runtime.sendMessage( message: "what is my windowId?" , function(response) 
// clearLocalStorage(response.allWindowsId);
windowId = response.windowId;
console.log(windowId);
);


background_script



chrome.runtime.onMessage.addListener(function(request, sender,sendResponse) 
if (request.message === "buttonClick")
chrome.tabs.reload(sender.tab.id);
sendResponse(message: 'handle button click');
else if (request.message === "what is my windowId?")
sendResponse(
windowId: sender.tab.windowId
);

return;
);


This doesnot work: Nested call chrome.windows.getAll in the onMessage listener.



background_script



chrome.runtime.onMessage.addListener(function(request, sender,sendResponse) 
if (request.message === "buttonClick")
chrome.tabs.reload(sender.tab.id);
sendResponse(message: 'handle button click');
else if (request.message === "what is my windowId?")
// additional code here
chrome.windows.getAll(function(windows)
sendResponse(
windowId: sender.tab.windowId,
windows: windows
);
);

return;
);


I've also tried to make the call chrome.windows.getAll async using chromeExtensionAsync, but no luck yet.



The following is the error message. It seems that the call to window.getAll happens after the function onMessage returns, even though I've marked this function async by the final return; statement.



Error handling response: TypeError: Cannot read property 'windowId' of undefined

Unchecked runtime.lastError: The message port closed before a response was received.









share|improve this question

















  • 1





    There's an official trick: move return into the else branch before } and make it return true. See Chrome Extension Message passing: response not sent

    – wOxxOm
    Mar 8 at 4:12












  • Solved! It could be solved without move return elsewhere. Making it return true; is enough to solve it.

    – Cảnh Toàn Nguyễn
    Mar 8 at 5:19














0












0








0








This works: Simple message passing with no nested call to chrome API in the onMessage listener.



content_script



chrome.runtime.sendMessage( message: "what is my windowId?" , function(response) 
// clearLocalStorage(response.allWindowsId);
windowId = response.windowId;
console.log(windowId);
);


background_script



chrome.runtime.onMessage.addListener(function(request, sender,sendResponse) 
if (request.message === "buttonClick")
chrome.tabs.reload(sender.tab.id);
sendResponse(message: 'handle button click');
else if (request.message === "what is my windowId?")
sendResponse(
windowId: sender.tab.windowId
);

return;
);


This doesnot work: Nested call chrome.windows.getAll in the onMessage listener.



background_script



chrome.runtime.onMessage.addListener(function(request, sender,sendResponse) 
if (request.message === "buttonClick")
chrome.tabs.reload(sender.tab.id);
sendResponse(message: 'handle button click');
else if (request.message === "what is my windowId?")
// additional code here
chrome.windows.getAll(function(windows)
sendResponse(
windowId: sender.tab.windowId,
windows: windows
);
);

return;
);


I've also tried to make the call chrome.windows.getAll async using chromeExtensionAsync, but no luck yet.



The following is the error message. It seems that the call to window.getAll happens after the function onMessage returns, even though I've marked this function async by the final return; statement.



Error handling response: TypeError: Cannot read property 'windowId' of undefined

Unchecked runtime.lastError: The message port closed before a response was received.









share|improve this question














This works: Simple message passing with no nested call to chrome API in the onMessage listener.



content_script



chrome.runtime.sendMessage( message: "what is my windowId?" , function(response) 
// clearLocalStorage(response.allWindowsId);
windowId = response.windowId;
console.log(windowId);
);


background_script



chrome.runtime.onMessage.addListener(function(request, sender,sendResponse) 
if (request.message === "buttonClick")
chrome.tabs.reload(sender.tab.id);
sendResponse(message: 'handle button click');
else if (request.message === "what is my windowId?")
sendResponse(
windowId: sender.tab.windowId
);

return;
);


This doesnot work: Nested call chrome.windows.getAll in the onMessage listener.



background_script



chrome.runtime.onMessage.addListener(function(request, sender,sendResponse) 
if (request.message === "buttonClick")
chrome.tabs.reload(sender.tab.id);
sendResponse(message: 'handle button click');
else if (request.message === "what is my windowId?")
// additional code here
chrome.windows.getAll(function(windows)
sendResponse(
windowId: sender.tab.windowId,
windows: windows
);
);

return;
);


I've also tried to make the call chrome.windows.getAll async using chromeExtensionAsync, but no luck yet.



The following is the error message. It seems that the call to window.getAll happens after the function onMessage returns, even though I've marked this function async by the final return; statement.



Error handling response: TypeError: Cannot read property 'windowId' of undefined

Unchecked runtime.lastError: The message port closed before a response was received.






google-chrome-extension message-passing






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Mar 8 at 4:03









Cảnh Toàn NguyễnCảnh Toàn Nguyễn

11627




11627







  • 1





    There's an official trick: move return into the else branch before } and make it return true. See Chrome Extension Message passing: response not sent

    – wOxxOm
    Mar 8 at 4:12












  • Solved! It could be solved without move return elsewhere. Making it return true; is enough to solve it.

    – Cảnh Toàn Nguyễn
    Mar 8 at 5:19













  • 1





    There's an official trick: move return into the else branch before } and make it return true. See Chrome Extension Message passing: response not sent

    – wOxxOm
    Mar 8 at 4:12












  • Solved! It could be solved without move return elsewhere. Making it return true; is enough to solve it.

    – Cảnh Toàn Nguyễn
    Mar 8 at 5:19








1




1





There's an official trick: move return into the else branch before } and make it return true. See Chrome Extension Message passing: response not sent

– wOxxOm
Mar 8 at 4:12






There's an official trick: move return into the else branch before } and make it return true. See Chrome Extension Message passing: response not sent

– wOxxOm
Mar 8 at 4:12














Solved! It could be solved without move return elsewhere. Making it return true; is enough to solve it.

– Cảnh Toàn Nguyễn
Mar 8 at 5:19






Solved! It could be solved without move return elsewhere. Making it return true; is enough to solve it.

– Cảnh Toàn Nguyễn
Mar 8 at 5:19













1 Answer
1






active

oldest

votes


















0














I just published an OSS library that helps with this case: @wranggle/rpc



Take a look at the BrowserExtensionTransport. It includes an example for making remote calls between a content script and the background window.






share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55056543%2fmessage-passing-with-nested-async-call-in-chrome-extension-fails%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    I just published an OSS library that helps with this case: @wranggle/rpc



    Take a look at the BrowserExtensionTransport. It includes an example for making remote calls between a content script and the background window.






    share|improve this answer



























      0














      I just published an OSS library that helps with this case: @wranggle/rpc



      Take a look at the BrowserExtensionTransport. It includes an example for making remote calls between a content script and the background window.






      share|improve this answer

























        0












        0








        0







        I just published an OSS library that helps with this case: @wranggle/rpc



        Take a look at the BrowserExtensionTransport. It includes an example for making remote calls between a content script and the background window.






        share|improve this answer













        I just published an OSS library that helps with this case: @wranggle/rpc



        Take a look at the BrowserExtensionTransport. It includes an example for making remote calls between a content script and the background window.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Mar 9 at 0:18









        ferbsferbs

        12816




        12816





























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55056543%2fmessage-passing-with-nested-async-call-in-chrome-extension-fails%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Save data to MySQL database using ExtJS and PHP [closed]2019 Community Moderator ElectionHow can I prevent SQL injection in PHP?Which MySQL data type to use for storing boolean valuesPHP: Delete an element from an arrayHow do I connect to a MySQL Database in Python?Should I use the datetime or timestamp data type in MySQL?How to get a list of MySQL user accountsHow Do You Parse and Process HTML/XML in PHP?Reference — What does this symbol mean in PHP?How does PHP 'foreach' actually work?Why shouldn't I use mysql_* functions in PHP?

            Compiling GNU Global with universal-ctags support Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern) Data science time! April 2019 and salary with experience The Ask Question Wizard is Live!Tags for Emacs: Relationship between etags, ebrowse, cscope, GNU Global and exuberant ctagsVim and Ctags tips and trickscscope or ctags why choose one over the other?scons and ctagsctags cannot open option file “.ctags”Adding tag scopes in universal-ctagsShould I use Universal-ctags?Universal ctags on WindowsHow do I install GNU Global with universal ctags support using Homebrew?Universal ctags with emacsHow to highlight ctags generated by Universal Ctags in Vim?

            Add ONERROR event to image from jsp tldHow to add an image to a JPanel?Saving image from PHP URLHTML img scalingCheck if an image is loaded (no errors) with jQueryHow to force an <img> to take up width, even if the image is not loadedHow do I populate hidden form field with a value set in Spring ControllerStyling Raw elements Generated from JSP tagds with Jquery MobileLimit resizing of images with explicitly set width and height attributeserror TLD use in a jsp fileJsp tld files cannot be resolved