Shiq
Shiq

Reputation: 13

How to call a site's function from a Chrome extension?

I'm trying to make a Chrome extention for myself, so that when I visit any sort of channel at Twitch.tv, the chat will automatically hide.

I've been looking at it with Firebug and I found toggle_chat(). If I type that in the console, the chat is no longer visible.

In my userscript file, I have written

window.onload = function() {
toggle_chat();
}

but it says

Uncaught ReferenceError: toggle_chat is not defined" in the console when I load a Twitch channel.

Any ideas how to make this work?

Upvotes: 1

Views: 510

Answers (2)

BeardFist
BeardFist

Reputation: 8201

This has nothing to do with timing. Chrome extensions and content scripts execute in an isolated world, meaning they have no access to the page's javascript including functions. You could make it so that your content script appends a <script> element that then calls the page function that you want but it would be far easier to just simulate a click on the #right_close element. You can do this with pure Javascript like this:

window.onload = function(){
  var evObj = document.createEvent('Events');
  evObj.initEvent('click', true, false);
  document.querySelector('#right_close').dispatchEvent(evObj);
}

Upvotes: 3

GJK
GJK

Reputation: 37369

I know this is very hacky, but it gets the job done, and sometimes that exactly what you need. :) It'll check for the function roughly ever half second until it exists. When it's finally there, it'll call the function then clear the timer.

window.onload = function() {
    var id = null;

    var check = function() {
        if (typeof toggle_chat === "function") {
            toggle_chat();
            clearInterval(id);
        }
    }

    id = setInterval(check, 500);
}

Upvotes: 1

Related Questions