Skip to content

Commit fb91fc9

Browse files
committed
chore: use scripting API in Firefox
1 parent 818c208 commit fb91fc9

5 files changed

Lines changed: 45 additions & 30 deletions

File tree

src/assets/manifest/firefox.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
"webRequestBlocking",
2222
"webNavigation",
2323
"nativeMessaging",
24-
"<all_urls>"
24+
"<all_urls>",
25+
"scripting"
2526
],
2627

2728
"content_security_policy": "default-src 'self'; style-src 'self' 'unsafe-inline'; img-src * data:; connect-src *; object-src 'none'; frame-ancestors http://127.0.0.1:*;",

src/base/main.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55
findNode,
66
getRandomFloat,
77
sleep,
8-
getBrowser
8+
getBrowserVersion
99
} from 'utils/common';
1010
import {targetEnv, clientAppVersion} from 'utils/config';
1111

@@ -181,10 +181,7 @@ function main() {
181181
const scale = window.devicePixelRatio;
182182

183183
let evScreenPropScale = osScale;
184-
if (
185-
targetEnv === 'firefox' &&
186-
parseInt((await getBrowser()).version.split('.')[0], 10) >= 99
187-
) {
184+
if (targetEnv === 'firefox' && (await getBrowserVersion()) >= 99) {
188185
// https://bugzilla.mozilla.org/show_bug.cgi?id=1753836
189186

190187
evScreenPropScale = scale;

src/setup/App.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
import {App, Button, TextField} from 'vueton';
6767
6868
import {pingClientApp} from 'utils/app';
69-
import {getText} from 'utils/common';
69+
import {getText, getBrowser} from 'utils/common';
7070
7171
export default {
7272
components: {
@@ -189,7 +189,7 @@ export default {
189189
},
190190
191191
created: async function () {
192-
this.browser = (await browser.runtime.sendMessage({id: 'getBrowser'})).name;
192+
this.browser = (await getBrowser()).name;
193193
194194
await this.setLocation();
195195

src/utils/common.js

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,13 @@ function insertCSS({
1717
origin = 'USER'
1818
}) {
1919
if (mv3) {
20-
const params = {target: {tabId, allFrames}};
20+
const params = {target: {tabId}};
2121

22-
if (!allFrames) {
22+
// Safari 17: allFrames and frameIds cannot both be specified,
23+
// fixed in Safari 18.
24+
if (allFrames) {
25+
params.target.allFrames = true;
26+
} else {
2327
params.target.frameIds = frameIds;
2428
}
2529

@@ -60,10 +64,14 @@ async function executeScript({
6064

6165
code = ''
6266
}) {
63-
if (mv3) {
64-
const params = {target: {tabId, allFrames}, world};
67+
if (mv3 || (targetEnv === 'firefox' && (await getBrowserVersion()) >= 128)) {
68+
const params = {target: {tabId}, world};
6569

66-
if (!allFrames) {
70+
// Safari 17: allFrames and frameIds cannot both be specified,
71+
// fixed in Safari 18.
72+
if (allFrames) {
73+
params.target.allFrames = true;
74+
} else {
6775
params.target.frameIds = frameIds;
6876
}
6977

@@ -287,6 +295,29 @@ async function getPlatform() {
287295
};
288296
}
289297

298+
async function getBrowser() {
299+
if (!isBackgroundPageContext()) {
300+
return browser.runtime.sendMessage({id: 'getBrowser'});
301+
}
302+
303+
let name, version;
304+
try {
305+
({name, version} = await browser.runtime.getBrowserInfo());
306+
} catch (err) {}
307+
308+
if (!name) {
309+
({name, version} = Bowser.getParser(self.navigator.userAgent).getBrowser());
310+
}
311+
312+
return {name: name.toLowerCase(), version: version.toLowerCase()};
313+
}
314+
315+
async function getBrowserVersion() {
316+
const {version} = await getBrowser();
317+
318+
return parseInt(version.split('.')[0], 10);
319+
}
320+
290321
async function isAndroid() {
291322
return (await getPlatform()).isAndroid;
292323
}
@@ -425,21 +456,6 @@ function findNode(
425456
});
426457
}
427458

428-
async function getBrowser() {
429-
let name, version;
430-
try {
431-
({name, version} = await browser.runtime.getBrowserInfo());
432-
} catch (err) {}
433-
434-
if (!name) {
435-
({name, version} = Bowser.getParser(self.navigator.userAgent).getBrowser());
436-
}
437-
438-
name = name.toLowerCase();
439-
440-
return {name, version};
441-
}
442-
443459
async function normalizeAudio(buffer) {
444460
const ctx = new AudioContext();
445461
const audioBuffer = await ctx.decodeAudioData(buffer);
@@ -577,6 +593,8 @@ export {
577593
isValidTab,
578594
getPlatformInfo,
579595
getPlatform,
596+
getBrowser,
597+
getBrowserVersion,
580598
isAndroid,
581599
getDarkColorSchemeQuery,
582600
getDayPrecisionEpoch,
@@ -589,7 +607,6 @@ export {
589607
querySelectorXpath,
590608
nodeQuerySelector,
591609
findNode,
592-
getBrowser,
593610
normalizeAudio,
594611
sliceAudio,
595612
prepareAudio,

webpack.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export default async function (env, argv) {
2525

2626
const provideExtApi = !['firefox', 'safari'].includes(targetEnv);
2727

28-
const provideModules = {Buffer: ['buffer', 'Buffer']};
28+
const provideModules = {};
2929
if (provideExtApi) {
3030
provideModules.browser = 'webextension-polyfill';
3131
}

0 commit comments

Comments
 (0)