1
+ import { v4 as uuidv4 } from 'uuid' ;
2
+
1
3
import { findNode } from 'utils/common' ;
2
4
import { initSearch , sendReceipt } from 'utils/engines' ;
3
5
import { targetEnv } from 'utils/config' ;
@@ -20,32 +22,34 @@ async function search({session, search, doc, storageIds}) {
20
22
21
23
// wait for search service to load
22
24
await new Promise ( ( resolve , reject ) => {
25
+ const eventName = uuidv4 ( ) ;
26
+
23
27
const onServiceReady = function ( ) {
24
28
window . clearTimeout ( timeoutId ) ;
25
29
resolve ( ) ;
26
30
} ;
27
31
28
32
const timeoutId = window . setTimeout ( function ( ) {
29
- document . removeEventListener ( '___serviceReady' , onServiceReady , {
33
+ document . removeEventListener ( eventName , onServiceReady , {
30
34
capture : true ,
31
35
once : true
32
36
} ) ;
33
37
34
38
reject ( new Error ( 'Search service is not ready' ) ) ;
35
39
} , 60000 ) ; // 1 minute
36
40
37
- document . addEventListener ( '___serviceReady' , onServiceReady , {
41
+ document . addEventListener ( eventName , onServiceReady , {
38
42
capture : true ,
39
43
once : true
40
44
} ) ;
41
45
42
- function serviceObserver ( ) {
46
+ function serviceObserver ( eventName ) {
43
47
let stop ;
44
48
45
49
const checkService = function ( ) {
46
50
if ( window . Ya ?. reactBus ?. e [ 'extralinks-popup:open' ] ?. length >= 2 ) {
47
51
window . clearTimeout ( timeoutId ) ;
48
- document . dispatchEvent ( new Event ( '___serviceReady' ) ) ;
52
+ document . dispatchEvent ( new Event ( eventName ) ) ;
49
53
} else if ( ! stop ) {
50
54
window . setTimeout ( checkService , 200 ) ;
51
55
}
@@ -60,9 +64,12 @@ async function search({session, search, doc, storageIds}) {
60
64
61
65
const script = document . createElement ( 'script' ) ;
62
66
if ( [ 'firefox' , 'safari' ] . includes ( targetEnv ) ) {
63
- script . nonce = document . querySelector ( 'script[nonce]' ) . nonce ;
67
+ const nonceNode = document . querySelector ( 'script[nonce]' ) ;
68
+ if ( nonceNode ) {
69
+ script . nonce = nonceNode . nonce ;
70
+ }
64
71
}
65
- script . textContent = `(${ serviceObserver . toString ( ) } )()` ;
72
+ script . textContent = `(${ serviceObserver . toString ( ) } )(" ${ eventName } " )` ;
66
73
document . documentElement . appendChild ( script ) ;
67
74
script . remove ( ) ;
68
75
} ) ;
0 commit comments