njfife
njfife

Reputation: 3575

Is it possible to trigger behavior in the content script from the popup?

Currently I am using message passing to send a request from my contentscript for data in localStorage and I am not having any issues with that, the content script is working as expected.

Can you do this in the other direction?

I have an object that exists in the content script that has a method called ".apply()" and I want to run it when the used clicks the option to do so.

I tried to make a listener in the content script like this:

var myLinker = new Linker();
chrome.extension.onRequest.addListener(function(request) {
    if (request.method == "apply")
{
        myLinker.apply("nothing");
        alert("applied");

}
    else
      ; //Do nothing

And send requests to it like this:

chrome.extension.sendRequest({method: "apply"}, function(){
    alert("Tried to request");
});

I get that it is a bit of a hack, but it is the only thing I could think of, and it doesn't even work =/

Is there a way to do this?

I am pretty sure I could just inject new code into the page from the popup (I think I saw an api function for that), and then run stuff, but that would take more memory and just feels like a bad way to do it, because you would basically have the exact same code twice.

Upvotes: 1

Views: 582

Answers (2)

Rob W
Rob W

Reputation: 348972

To send a message from the extension to a content script, use chrome.tabs.sendMessage instead of chrome.extension.sendRequest.

Because sendRequest has been superseded by onMessage in Chrome 20, there's no official documentation for sendRequest any more. The documentation for chrome.tabs.sendMessage can be found here. Please note that these events cannot be mixed, use either *Request or *Message.

Upvotes: 3

user1621263
user1621263

Reputation: 11

Yes, you would use this: http://developer.chrome.com/extensions/tabs.html#method-sendMessage

Content scripts live within the DOM of the page. And each page that is open within Chrome has a tab ID associated with it -- http://developer.chrome.com/extensions/tabs.html#type-tabs.Tab

Let's say you want to send the {method: "apply"} to a page that was just opened in a new tab:

chrome.tabs.onCreated.addListener(function(tab) {
    chrome.tabs.sendMessage(tab.id, { method: "apply" });
});

There are other events/methods to get the specific Tab you want to send the message to. I think there's one called getCurrent to send to the currently selected tab, check out the docs for that.

Upvotes: 1

Related Questions