1
1
const EVENTS = [ 'auxclick' , 'click' , 'contextmenu' , 'dblclick' , 'keydown' , 'keyup' , 'mousedown' , 'mouseup' , 'touchend' ] ;
2
2
3
3
export default class SilentHack {
4
+ #trying = false ;
5
+ #state = 'blocked' ;
6
+ #audioFile = '' ;
7
+
4
8
constructor ( ) {
5
- this . trying = false ;
6
- this . state = 'blocked' ;
7
- this . audioFile = this . createAudioData ( ) ;
9
+ this . #audioFile = this . #createAudioData( ) ;
8
10
9
11
EVENTS . forEach ( ( evtName ) => {
10
- window . addEventListener ( evtName , this . tryUnblock . bind ( this ) , { capture : true , passive : true } ) ;
12
+ window . addEventListener ( evtName , this . # tryUnblock. bind ( this ) , { capture : true , passive : true } ) ;
11
13
} ) ;
12
14
}
13
15
14
- tryUnblock ( ) {
15
- if ( this . state === 'allowed' || this . trying ) return ;
16
- this . createHTMLAudio ( ) ;
16
+ # tryUnblock( ) {
17
+ if ( this . # state === 'allowed' || this . # trying) return ;
18
+ this . # createHTMLAudio( ) ;
17
19
}
18
20
19
- createAudioData ( ) {
21
+ # createAudioData( ) {
20
22
const rate = 48000 ;
21
23
const arrayBuffer = new ArrayBuffer ( 10 ) ;
22
24
const dataView = new DataView ( arrayBuffer ) ;
@@ -30,38 +32,38 @@ export default class SilentHack {
30
32
return `data:audio/wav;base64,UklGRisAAABXQVZFZm10IBAAAAABAAEA${ missingCharacters } AgAZGF0YQcAAACAgICAgICAAAA=` ;
31
33
}
32
34
33
- createHTMLAudio ( ) {
34
- this . trying = true ;
35
+ # createHTMLAudio( ) {
36
+ this . # trying = true ;
35
37
36
38
let audio = document . createElement ( 'audio' ) ;
37
39
38
40
audio . setAttribute ( 'x-webkit-airplay' , 'deny' ) ;
39
41
audio . preload = 'auto' ;
40
42
audio . loop = true ;
41
- audio . src = this . audioFile ;
43
+ audio . src = this . # audioFile;
42
44
audio . load ( ) ;
43
45
44
46
audio . play ( ) . then (
45
47
( ) => {
46
- this . state = 'allowed' ;
48
+ this . # state = 'allowed' ;
47
49
} ,
48
50
( ) => {
49
- this . state = 'blocked' ;
51
+ this . # state = 'blocked' ;
50
52
audio . src = 'about:blank' ;
51
53
audio . load ( ) ;
52
54
audio = null ;
53
- this . trying = false ;
55
+ this . # trying = false ;
54
56
}
55
57
) ;
56
58
}
57
59
58
60
destroy ( ) {
59
61
EVENTS . forEach ( ( evtName ) => {
60
- window . removeEventListener ( evtName , this . tryUnblock . bind ( this ) , { capture : true , passive : true } ) ;
62
+ window . removeEventListener ( evtName , this . # tryUnblock. bind ( this ) , { capture : true , passive : true } ) ;
61
63
} ) ;
62
64
}
63
65
64
66
get allowed ( ) {
65
- return this . state === 'allowed' ;
67
+ return this . # state === 'allowed' ;
66
68
}
67
69
}
0 commit comments