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+
6164// End of file
0 commit comments