@@ -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+
290321async 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-
443459async 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 ,
0 commit comments