Call function on page change

I would like to call a JavaScript function on every page change by the user.
I understand JS and Ruby on Rails code, but I’m not sure what is the best practice in Discourse to achieve that. I’d be grateful for any tips.

Ps. I’m using a dockerized version of Discourse.

1 Like

Depending on what you want to do this could be wildly varied, but to call a function, or do something on every page change by the user you could use the plugin API.

Here you can read through a developers guide to using Discourse theming/components (custom JS etc).

Here you can find withPluginApi information.

This is a simple example of me logging the current URL as well as the page title.

I am doing this in the common/head_tag.html file. Which can be edited at /admin/customize/themes/9/common/head_tag/edit

<script type="text/discourse-plugin" version="0.8">
    api.onPageChange((url, title) => {
        console.log(url, title);
    });
</script>
5 Likes

Thanks @jordan.vidrine for reply. I will check these resources. One other question, maybe more related to Dockerized version. Is there any best practice for editing files inside the container? May I just “get” into the container modify files and restart it?

1 Like

For some instances I believe that should work. (I dont have much experience with Docker)

You can also edit certain css and html files, as well as <script> tags from the discourse admin panel when visiting your site at /admin/customize/themes/9/common/head_tag/edit.

1 Like