@@ -7,6 +7,7 @@ import { get_network_info, is_support_send_beacon } from './utils';
77export class BrowserReport extends BaseReport < BrowserOptionsType > {
88 configReportXhr : unknown = null ;
99 timer = null ;
10+ useImgUpload = false ;
1011 constructor ( options :BrowserOptionsType ) {
1112 super ( ) ;
1213 super . bindOptions ( options ) ;
@@ -23,12 +24,23 @@ export class BrowserReport extends BaseReport<BrowserOptionsType> {
2324 }
2425 xhr . send ( safe_stringify ( data ) ) ;
2526 }
27+ imgRequest ( data : ReportBaseInfo | ReportBaseInfo [ ] , url : string ) : void {
28+ let _img = new Image ( ) ;
29+ const _spliceStr = url . indexOf ( '?' ) === - 1 ? '?' : '&' ;
30+ _img . src = `${ url } ${ _spliceStr } data=${ encodeURIComponent ( safe_stringify ( data ) ) } ` ;
31+ _img = null ;
32+ }
2633 // beacon上报
2734 beaconPost ( data : ReportBaseInfo | ReportBaseInfo [ ] , url : string ) : void {
2835 _global . navigator . sendBeacon . call ( window . navigator , url , safe_stringify ( data ) ) ;
2936 }
3037 report ( data : ReportBaseInfo | ReportBaseInfo [ ] , url : string ) {
31- const _fn = is_support_send_beacon ( ) ? this . beaconPost : this . post ;
38+ let _fn = null ;
39+ if ( this . useImgUpload ) {
40+ _fn = this . imgRequest ;
41+ } else {
42+ _fn = is_support_send_beacon ( ) ? this . beaconPost : this . post ;
43+ }
3244 if ( _global . requestIdleCallback ) { // 不阻止进程
3345 _global . requestIdleCallback ( async ( ) => {
3446 await _fn ( data , url ) ;
@@ -62,6 +74,7 @@ export class BrowserReport extends BaseReport<BrowserOptionsType> {
6274 } ;
6375 }
6476 bindOptions ( options : BrowserOptionsType ) : void {
77+ this . useImgUpload = options . useImgUpload || false ;
6578 if ( options . configReportXhr && isFunction ( options . configReportXhr ) ) {
6679 this . configReportXhr = options . configReportXhr ;
6780 }
0 commit comments