1
- //======================================================================
2
- // Inner functions
3
- //======================================================================
4
- /**
5
- * Send event to inject script
6
- * @param {* } type event type defined on inject script
7
- * @param {* } data data to send
8
- */
9
- function sendEvent ( type , data = '' ) {
10
- let detailObj = { type : type , data : data } ;
11
- let evt = new CustomEvent ( 'vpcomm' , { bubbles : true , detail : detailObj } ) ;
12
- console . log ( '[vp content] send from content - ' , type , data , evt ) ;
13
- document . dispatchEvent ( evt ) ;
14
-
15
- }
16
- function checkScriptExists ( url ) {
17
- return document . querySelectorAll ( `script[src="${ url } "]` ) . length > 0 ;
18
- }
19
- /**
20
- * Inject file
21
- */
22
- function injectFile ( ) {
23
- let url = chrome . runtime . getURL ( 'inject.js' ) ;
24
- console . log ( '[vp content] check inject file...' )
25
- if ( checkScriptExists ( url ) ) {
26
- console . log ( '[vp content] inject file already exist!' ) ;
27
- return false ;
28
- }
29
- console . log ( '[vp content] inject file!' ) ;
30
- // inject script
31
- var s = document . createElement ( 'script' ) ;
32
- s . src = url ;
33
- s . onload = function ( ) {
34
- // send event to inject.js to send its url
35
- var url = chrome . runtime . getURL ( '' ) ;
36
- // var evt = new CustomEvent('vpcomm', { bubbles: true, detail: { type: 'sendBase', data: url } });
37
- // document.dispatchEvent(evt);
38
- sendEvent ( 'sendBase' , url ) ;
39
- } ;
40
- ( document . head || document . documentElement ) . appendChild ( s ) ;
41
- return true ;
42
- }
43
-
44
- //======================================================================
45
- // Event listener - background <-> inject
46
- //======================================================================
47
- function msgHandler ( msg , sender ) {
48
- if ( msg == "toggle" ) {
49
- // var evt = new CustomEvent('vpcomm', { bubbles: true, detail: { type: 'toggle' } });
50
- // document.dispatchEvent(evt);
51
- // check if injected
52
- injectFile ( ) ;
53
- sendEvent ( 'toggle' ) ;
54
- }
55
- }
56
- chrome . runtime . onMessage . removeListener ( msgHandler ) ;
57
- chrome . runtime . onMessage . addListener ( msgHandler ) ;
58
-
59
- console . log ( '[vp content] content script executed!' ) ;
60
-
1
+ //======================================================================
2
+ // Inner functions
3
+ //======================================================================
4
+ /**
5
+ * Send event to inject script
6
+ * @param {* } type event type defined on inject script
7
+ * @param {* } data data to send
8
+ */
9
+ function sendEvent ( type , data = '' ) {
10
+ let detailObj = { type : type , data : data } ;
11
+ let evt = new CustomEvent ( 'vpcomm' , { bubbles : true , detail : detailObj } ) ;
12
+ console . log ( '[vp content] send from content - ' , type , data , evt ) ;
13
+ document . dispatchEvent ( evt ) ;
14
+
15
+ }
16
+ function checkScriptExists ( url ) {
17
+ return document . querySelectorAll ( `script[src="${ url } "]` ) . length > 0 ;
18
+ }
19
+ /**
20
+ * Inject file
21
+ */
22
+ function injectFile ( ) {
23
+ let url = chrome . runtime . getURL ( 'inject.js' ) ;
24
+ console . log ( '[vp content] check inject file...' )
25
+ if ( checkScriptExists ( url ) ) {
26
+ console . log ( '[vp content] inject file already exist!' ) ;
27
+ return false ;
28
+ }
29
+ console . log ( '[vp content] inject file!' ) ;
30
+ // inject script
31
+ var s = document . createElement ( 'script' ) ;
32
+ s . src = url ;
33
+ s . onload = function ( ) {
34
+ // send event to inject.js to send its url
35
+ var url = chrome . runtime . getURL ( '' ) ;
36
+ // var evt = new CustomEvent('vpcomm', { bubbles: true, detail: { type: 'sendBase', data: url } });
37
+ // document.dispatchEvent(evt);
38
+ sendEvent ( 'sendBase' , url ) ;
39
+ } ;
40
+ ( document . head || document . documentElement ) . appendChild ( s ) ;
41
+ return true ;
42
+ }
43
+
44
+ //======================================================================
45
+ // Event listener - background <-> (content -> inject)
46
+ //======================================================================
47
+ function msgHandler ( msg , sender ) {
48
+ if ( msg && msg . type ) {
49
+ switch ( msg . type ) {
50
+ case "toggle" :
51
+ injectFile ( ) ;
52
+ sendEvent ( 'toggle' ) ;
53
+ break ;
54
+ default :
55
+ break ;
56
+ }
57
+ }
58
+ }
59
+ chrome . runtime . onMessage . removeListener ( msgHandler ) ;
60
+ chrome . runtime . onMessage . addListener ( msgHandler ) ;
61
+
62
+ console . log ( '[vp content] content script executed!' ) ;
63
+
61
64
// End of file
0 commit comments