-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinject.js
59 lines (50 loc) · 1.62 KB
/
inject.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// inject.js
(function() {
if (window.__ConsoleCaptureInjected) {
console.log('ConsoleCapture: Scripts already injected.');
return;
}
window.__ConsoleCaptureInjected = true;
const logTypes = ['log', 'info', 'warn', 'error'];
logTypes.forEach(type => {
const original = console[type];
console[type] = function(...args) {
original.apply(console, args);
window.postMessage({
source: 'ConsoleCapture',
type: type,
args: args
}, '*');
};
});
// Listen for unhandled promise rejections
window.addEventListener('unhandledrejection', function(event) {
window.postMessage({
source: 'ConsoleCapture',
type: 'unhandledPromiseRejection',
reason: event.reason
}, '*');
});
// Listen for errors/exceptions
window.addEventListener('error', function(event) {
window.postMessage({
source: 'ConsoleCapture',
type: 'exception',
message: event.message,
filename: event.filename,
lineno: event.lineno,
colno: event.colno,
error: event.error
}, '*');
});
console.log('ConsoleCapture: inject.js injected successfully.');
// Observe DOM changes to handle dynamic content (e.g., SPA route changes)
const observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
// Placeholder for any necessary logic upon DOM changes
// For example, re-inject scripts or handle dynamically added console methods
});
});
observer.observe(document.body, { childList: true, subtree: true });
console.log('ConsoleCapture: MutationObserver set up.');
})();