UNPKG

@quasar/app-webpack

Version:

Quasar Framework App CLI with Webpack

150 lines (132 loc) 4.8 kB
/** * Importing the file below initializes the content script. * * Warning: * Do not remove the import statement below. It is required for the extension to work. * If you don't need createBridge(), leave it as "import '#q-app/bex/content'". */ import { createBridge } from '#q-app/bex/content'; // The use of the bridge is optional. const bridge = createBridge({ debug: false }); /** * bridge.portName is 'content@<path>-<number>' * where <path> is the relative path of this content script * filename (without extension) from /src-bex * (eg. 'my-content-script', 'subdir/my-script') * and <number> is a unique instance number (1-10000). */ declare module '@quasar/app-webpack' { interface BexEventMap { /* eslint-disable @typescript-eslint/no-explicit-any */ 'some.event': [{ someProp: string }, void]; /* eslint-enable @typescript-eslint/no-explicit-any */ } } // Hook into the bridge to listen for events sent from the other BEX parts. bridge.on('some.event', ({ payload }) => { if (payload.someProp) { // Access a DOM element from here. // Document in this instance is the underlying website the contentScript runs on const el = document.getElementById('some-id'); if (el) { el.innerText = 'Quasar Rocks!'; }; }; }); /** * Leave this AFTER you attach your initial listeners * so that the bridge can properly handle them. * * You can also disconnect from the background script * later on by calling bridge.disconnectFromBackground(). * * To check connection status, access bridge.isConnected */ bridge.connectToBackground() .then(() => { console.log('Connected to background'); }) .catch(err => { console.error('Failed to connect to background:', err); }); /* // More examples: // Listen to a message from the client bridge.on('test', message => { console.log(message); console.log(message.payload); }); // Send a message and split payload into chunks // to avoid max size limit of BEX messages. // Warning! This happens automatically when the payload is an array. // If you actually want to send an Array, wrap it in an object. bridge.send({ event: 'test', to: 'app', payload: [ 'chunk1', 'chunk2', 'chunk3', ... ] }).then(responsePayload => { ... }).catch(err => { ... }); // Send a message and wait for a response bridge.send({ event: 'test', to: 'background', payload: { banner: 'Hello from content-script' } }).then(responsePayload => { ... }).catch(err => { ... }); // Listen to a message from the client and respond synchronously bridge.on('test', message => { console.log(message); return { banner: 'Hello from a content-script!' }; }); // Listen to a message from the client and respond asynchronously bridge.on('test', async message => { console.log(message); const result = await someAsyncFunction(); return result; }); bridge.on('test', message => { console.log(message); return new Promise(resolve => { setTimeout(() => { resolve({ banner: 'Hello from a content-script!' }); }, 1000); }); }); // Broadcast a message to background, app & the other content scripts bridge.portList.forEach(portName => { bridge.send({ event: 'test', to: portName, payload: 'Hello from content-script!' }); }); // Find any connected content script and send a message to it const contentPort = bridge.portList.find(portName => portName.startsWith('content@')); if (contentPort) { bridge.send({ event: 'test', to: contentPort, payload: 'Hello from a content-script!' }); } // Send a message to a certain content script bridge .send({ event: 'test', to: 'content@my-content-script-2345', payload: 'Hello from a content-script!' }) .then(responsePayload => { ... }) .catch(err => { ... }); // Listen for connection events // (the "@quasar:ports" is an internal event name registered automatically by the bridge) // --> ({ portList: string[], added?: string } | { portList: string[], removed?: string }) bridge.on('@quasar:ports', ({ portList, added, removed }) => { console.log('Ports:', portList); if (added) { console.log('New connection:', added); } else if (removed) { console.log('Connection removed:', removed); } }); // Current bridge port name (can be 'content@<name>-<xxxxx>') console.log(bridge.portName); // Dynamically set debug mode bridge.setDebug(true); // boolean // Log a message on the console (if debug is enabled) bridge.log('Hello world!'); bridge.log('Hello', 'world!'); bridge.log('Hello world!', { some: 'data' }); bridge.log('Hello', 'world', '!', { some: 'object' }); // Log a warning on the console (regardless of the debug setting) bridge.warn('Hello world!'); bridge.warn('Hello', 'world!'); bridge.warn('Hello world!', { some: 'data' }); bridge.warn('Hello', 'world', '!', { some: 'object' }); */