Skip to content

Commit 3788846

Browse files
committed
Inject transformed JS in content script for Chromium compatibility
1 parent df4db73 commit 3788846

File tree

3 files changed

+38
-23
lines changed

3 files changed

+38
-23
lines changed

lib/background.js

+21-23
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,8 @@
11
import browser from 'webextension-polyfill';
22
import transform from './transform.js';
33

4-
function jsHandler(event) {
5-
let filter = browser.webRequest.filterResponseData(event.requestId);
6-
7-
let buf = '';
8-
let decoder = new TextDecoder('utf-8');
9-
const encoder = new TextEncoder();
10-
11-
filter.ondata = event => {
12-
buf += decoder.decode(event.data, { stream: true });
13-
};
14-
15-
filter.onstop = () => {
16-
const script = transform(buf);
17-
filter.write(encoder.encode(script));
18-
filter.disconnect();
19-
};
20-
21-
return {};
4+
function jsHandler() {
5+
return { cancel: true };
226
}
237

248
function requestCacheHandler(event) {
@@ -27,11 +11,25 @@ function requestCacheHandler(event) {
2711
};
2812
}
2913

30-
const filter = {
31-
urls: ['https://d35iw2jmbg6ut8.cloudfront.net/static/js/main.*.chunk.js']
32-
};
14+
async function transformRequestHandler(mainScriptFilename) {
15+
const mainScriptUrl = `https://d35iw2jmbg6ut8.cloudfront.net/static/js/${mainScriptFilename}`;
3316

34-
browser.webRequest.onBeforeRequest.addListener(jsHandler, filter, ['blocking']);
35-
browser.webRequest.onBeforeSendHeaders.addListener(requestCacheHandler, filter, ['blocking', 'requestHeaders']);
17+
const req = await fetch(mainScriptUrl);
18+
const origScript = await req.text();
19+
20+
const transformedScript = transform(origScript);
21+
22+
return transformedScript;
23+
}
24+
25+
const urls = ['https://d35iw2jmbg6ut8.cloudfront.net/static/js/main.*.chunk.js']
26+
27+
browser.webRequest.onBeforeRequest.addListener(jsHandler, {
28+
urls,
29+
types: ['script']
30+
}, ['blocking']);
31+
browser.webRequest.onBeforeSendHeaders.addListener(requestCacheHandler, { urls }, ['blocking', 'requestHeaders']);
3632

3733
browser.webRequest.handlerBehaviorChanged();
34+
35+
browser.runtime.onMessage.addListener(transformRequestHandler);

lib/content.js

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import scanElement from './scanElement.js';
22
import { removeAttributes } from './addAttribute.js';
3+
import injectTransformed from './injectTransformed.js';
34
import './style.css';
45

56
async function observe(mutations) {
@@ -31,3 +32,5 @@ observer.observe(document.body, {
3132
characterData: true,
3233
characterDataOldValue: true
3334
});
35+
36+
injectTransformed();

lib/injectTransformed.js

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import browser from 'webextension-polyfill';
2+
3+
export default async function injectTransformed() {
4+
const mainScript = document.querySelector('body > script:last-of-type');
5+
const mainScriptUrl = mainScript.src;
6+
7+
const mainScriptFilename = mainScriptUrl.split('/').pop();
8+
9+
const transformedScript = await browser.runtime.sendMessage(mainScriptFilename);
10+
11+
const scriptElem = document.createElement('script');
12+
scriptElem.text = transformedScript;
13+
document.documentElement.prepend(scriptElem);
14+
}

0 commit comments

Comments
 (0)