This is a prototype for a collaborative browser extension. This proof of concept aims to demonstrate the possibilities of collaborative browsing using web extensions and to provide a starting point for further development. It was created as part of a bachelor thesis of the course Communication, Knowledge, Media at the University of Applied Sciences Upper Austria. The extension is based on the WebExtensions API and uses Firebase as a backend. The content script application is implemented using Vue. The extension is currently in an early stage and is not intended for production use. The extension should work on both Chrome and Firefox by using the web extension polyfill.
- create collaborative browsing sessions
- join a session by entering a session ID
- displays the cursor of other users on the page
- follow the cursor of another user on a page
- jump to the current cursor position of another user
- draw shapes on a page to mark areas & synchronize them with other users
- write chat messages with other users
- select text & synchronize the selection with other users
- jump to the page another user is currently on
- Clone the repository
- Install the dependencies with
npm install
orpnpm install
- Create a Firebase project and add a web app
- Copy the Firebase configuration from the Firebase console and paste it into the
firebase
variable in the filefirebase.js
. - Build the extension with
npm run build
orpnpm install
(to build the extension on file change runnpm run dev
orpnpm run dev
) - Load the
dist
folder of the extension in Firefox or Chrome and activate the extension - Open a website and let the extension initialize (wait a second or two...)
- Open the extension popup and click on "Create Session"
- Share the session ID with your friends
- Your friends can join the session by clicking on "Join Session" and entering the session ID
- The extension will now synchronize the current cursor positions, chat messages, drawn shapes & selected text with your friends
- Enjoy collaborative browsing!
The extension consists of three parts: the background script, the popup script and the content script.
- The background script is responsible for the communication & synchronization with Firebase. It is responsible for creating a new session, joining a session, sending & receiving data and handling errors.
- The popup script is responsible for displaying the settings of the extension and handling user input.
- The content script is responsible for displaying the session data (cursors, messages, shapes, selections) and handling user input.
The settings of the extension are stored and persisted using the browser.storage.sync API.
- The extension does probably not work on all browsers. It has only been tested on Chrome 111.
- Styling of the extension sidebar menu is sometimes broken by css of the website the extension is loaded on.
- If the extension popup is opened too early (before the content script has initialized), the extension may will not work properly and throws an error message.
- If the option "Service Worker - Reload on update" is enabled in the Chrome developer console (tab application), the extension will not work properly.
The author of this extension is Jakob Osterberger. Special thanks to my supervisor FH-Prof. DI (FH) Dr. Johannes Schönböck for his support and guidance.
The accompanying bachelor thesis can be found here. It contains a detailed description of the extension and its impleme