adding examples
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
import { keypress } from './background-keypress.js';
|
||||
import { click, hover } from './background-click.js';
|
||||
import { navigate, back, forward, close, reload, show } from './background-navigate.js';
|
||||
import { screenshot } from './background-screenshot.js';
|
||||
import { getLogs } from './background-console.js';
|
||||
|
||||
export const getFromContentScript = async (tabId, command, params, ) => {
|
||||
return await chrome.tabs.sendMessage(tabId, { command, params });
|
||||
}
|
||||
|
||||
// Detect browser type from user agent
|
||||
export const detectBrowser = () => {
|
||||
const userAgent = navigator.userAgent.toLowerCase();
|
||||
|
||||
// Check for Chromium-based browsers that support Chrome extensions
|
||||
if (userAgent.includes('edg/')) {
|
||||
return 'edge';
|
||||
} else if (userAgent.includes('opr/') || userAgent.includes('opera/')) {
|
||||
return 'opera';
|
||||
} else if (userAgent.includes('vivaldi/')) {
|
||||
return 'vivaldi';
|
||||
} else if (userAgent.includes('brave/')) {
|
||||
return 'brave';
|
||||
} else if (userAgent.includes('chrome/')) {
|
||||
// Additional check for Brave which doesn't always include 'brave' in UA
|
||||
if (navigator.brave && navigator.brave.isBrave) {
|
||||
return 'brave';
|
||||
}
|
||||
return 'chrome';
|
||||
} else {
|
||||
// Default to chromium for any other Chromium-based browser
|
||||
return 'chromium';
|
||||
}
|
||||
};
|
||||
|
||||
export const getTabInfo = async(tabId) => await getFromContentScript(tabId, 'getTabInfo');
|
||||
export const getElement = async (tabId, selector, xpath, visible) => {
|
||||
return await getFromContentScript(tabId, 'element', { selector, xpath, visible });
|
||||
}
|
||||
|
||||
export const respondWith = async (tabId, obj, selector, xpath) => {
|
||||
const info = await getTabInfo(tabId);
|
||||
return {
|
||||
success: !obj.error,
|
||||
selector,
|
||||
xpath: !selector ? xpath : undefined,
|
||||
...info,
|
||||
...obj
|
||||
};
|
||||
}
|
||||
export const respondWithError = async (tabId, code, message, selector, xpath) => {
|
||||
return respondWith(tabId,{ error: { code, message } }, selector, xpath);
|
||||
}
|
||||
export async function attachDebugger(tabId, action) {
|
||||
let debuggerAttached = false;
|
||||
try {
|
||||
// Attach debugger to capture screenshot without making tab active
|
||||
await chrome.debugger.attach({tabId}, '1.3');
|
||||
debuggerAttached = true;
|
||||
|
||||
// Enable the Page domain
|
||||
await chrome.debugger.sendCommand({tabId}, 'Page.enable');
|
||||
|
||||
return await action();
|
||||
}
|
||||
finally {
|
||||
// Always detach debugger if attached
|
||||
try {
|
||||
if (debuggerAttached) await chrome.debugger.detach({tabId: tabId});
|
||||
}
|
||||
catch (e) { }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export const backgroundCommands = {
|
||||
navigate,
|
||||
back,
|
||||
forward,
|
||||
close,
|
||||
reload,
|
||||
show,
|
||||
click,
|
||||
hover,
|
||||
keypress,
|
||||
screenshot,
|
||||
getLogs
|
||||
}
|
||||
Reference in New Issue
Block a user