1
1
;
2
2
( function ( ) {
3
- 'use strict' ;
3
+ 'use strict'
4
4
5
- const fetchBak = window . fetch
6
- let index = 0
5
+ var isBrowser = new Function ( "try {return this=== window}catch(e){ return false}" ) ;
6
+ if ( ! isBrowser ( ) || ! window . fetch ) return ;
7
7
8
- window . fetch = function ( reqOrUrl , options ) {
9
- const method = getValFromOpt ( options , 'method' , '' )
8
+ fetchPolyfill ( ) ;
10
9
11
- if ( method . toLowerCase ( ) == 'jsonp' ) {
12
- return jsonp ( reqOrUrl , options )
13
- } else {
14
- return fetchBak . apply ( window , arguments )
10
+ ////////////////////////////////////////////////////////////////////////////
11
+ //
12
+ // fetch polyfill func
13
+ //
14
+ ////////////////////////////////////////////////////////////////////////////
15
+ function fetchPolyfill ( ) {
16
+ var fetchBak = window . fetch ;
17
+
18
+ window . fetch = function ( reqOrUrl , options ) {
19
+ var method = getValFromOpt ( options , 'method' , '' ) ;
20
+
21
+ if ( method . toLowerCase ( ) == 'jsonp' ) {
22
+ return jsonp ( reqOrUrl , options ) ;
23
+ } else {
24
+ return fetchBak . apply ( window , arguments ) ;
25
+ }
15
26
}
16
27
}
17
28
22
33
////////////////////////////////////////////////////////////////////////////
23
34
function jsonp ( reqOrUrl , options ) {
24
35
if ( ! reqOrUrl ) {
25
- printfError ( "1 argument required, but only 0 present" )
26
- return null
36
+ new Error ( "1 argument required, but only 0 present" ) ;
37
+ return null ;
27
38
}
28
39
29
- return new Promise ( ( resolve , reject ) => {
40
+ return new Promise ( function ( resolve , reject ) {
30
41
// create cache data
31
- const id = generateId ( )
32
- const timeout = getValFromOpt ( options , 'callback' , 8000 ) << 0
33
- const callback = getValFromOpt ( options , 'callback' ) || getValFromOpt ( options , 'cb' ) || 'callback'
34
- const callbackName = getValFromOpt ( options , 'callbackName' , id )
35
- const tid = setTimeout ( ( ) => { destroy ( ', it is timeout' ) } , timeout )
42
+ var id = generateId ( ) ;
43
+ var timeout = getValFromOpt ( options , 'callback' , 8000 ) << 0 ;
44
+ var callback = getValFromOpt ( options , 'callback' ) || getValFromOpt ( options , 'cb' ) || 'callback' ;
45
+ var callbackName = getValFromOpt ( options , 'callbackName' , id ) ;
46
+ var tid = setTimeout ( function ( ) { destroy ( ', it is timeout' ) ; } , timeout ) ;
36
47
37
48
// generate url
38
- let url = typeof reqOrUrl === 'object' ? reqOrUrl . url : reqOrUrl + ''
39
- url += ( url . indexOf ( '?' ) > 0 ? '&' : '?' ) . replace ( '?&' , '?' )
40
- url += callback + '=' + callbackName
49
+ var url = typeof reqOrUrl === 'object' ? reqOrUrl . url : reqOrUrl + '' ;
50
+ url += ( url . indexOf ( '?' ) > 0 ? '&' : '?' ) . replace ( '?&' , '?' ) ;
51
+ url += callback + '=' + callbackName ;
41
52
42
53
// create script tag
43
- const head = document . getElementsByTagName ( 'head' ) [ 0 ] || document . head
44
- const script = document . createElement ( 'script' )
45
- script . src = url
46
- script . onerror = destroy
47
- head . appendChild ( script )
48
-
49
- window [ callbackName ] = ( res ) => {
50
- resolve ( new Response ( res , url ) )
51
- destroy ( )
54
+ var head = document . getElementsByTagName ( 'head' ) [ 0 ] || document . head ;
55
+ var script = document . createElement ( 'script' ) ;
56
+ script . src = url ;
57
+ script . onerror = destroy ;
58
+ head . appendChild ( script ) ;
59
+
60
+ window [ callbackName ] = function ( res ) {
61
+ resolve ( new Response ( res , url ) ) ;
62
+ destroy ( ) ;
52
63
}
53
64
54
65
// destroy func
55
66
function destroy ( msg ) {
56
67
try {
57
- deleteFromWin ( callbackName )
58
- script . parentNode . removeChild ( script )
59
- clearTimeout ( tid )
68
+ deleteFromWin ( callbackName ) ;
69
+ script . parentNode . removeChild ( script ) ;
70
+ clearTimeout ( tid ) ;
60
71
} catch ( e ) { }
61
72
62
- reject ( new Error ( `JSONP request to ${ url } ${ msg || '' } ` ) )
73
+ msg = msg || '' ;
74
+ reject ( new Error ( 'JSONP request to ' + url + msg ) ) ;
63
75
}
64
76
} )
65
77
}
70
82
//
71
83
////////////////////////////////////////////////////////////////////////////
72
84
function Response ( res , url ) {
73
- this . ok = true
74
- this . status = 200
75
- this . type = 'default'
76
- this . url = url || ''
77
- this . statusText = 'OK'
78
- this . bodyUsed = false
79
- this . _bodyText = res
85
+ this . ok = true ;
86
+ this . status = 200 ;
87
+ this . type = 'default' ;
88
+ this . url = url || '' ;
89
+ this . statusText = 'OK' ;
90
+ this . bodyUsed = false ;
91
+ this . _bodyText = res ;
80
92
}
81
93
82
94
Response . prototype = {
83
95
text : function ( ) {
84
- this . bodyUsed = true
85
- return Promise . resolve ( this . _bodyText )
96
+ this . bodyUsed = true ;
97
+ return Promise . resolve ( this . _bodyText ) ;
86
98
} ,
87
99
88
100
json : function ( ) {
89
- this . bodyUsed = true
90
- return Promise . resolve ( toJson ( this . _bodyText ) )
101
+ this . bodyUsed = true ;
102
+ return Promise . resolve ( toJson ( this . _bodyText ) ) ;
91
103
} ,
92
104
93
105
clone : function ( ) {
94
- return new Response ( this . _bodyText , url )
106
+ return new Response ( this . _bodyText , url ) ;
95
107
}
96
108
}
97
109
100
112
// generate Id
101
113
//
102
114
////////////////////////////////////////////////////////////////////////////
115
+ var index = 0 ;
103
116
function generateId ( ) {
104
- return ` jsonpcallback_${ ~ ~ ( Math . random ( ) * Math . pow ( 10 , 7 ) ) } _ ${ ++ index } `
117
+ return ' jsonpcallback_' + ~ ~ ( Math . random ( ) * Math . pow ( 10 , 7 ) ) + '_' + ( ++ index ) ;
105
118
}
106
119
107
120
////////////////////////////////////////////////////////////////////////////
111
124
////////////////////////////////////////////////////////////////////////////
112
125
function deleteFromWin ( key ) {
113
126
try {
114
- delete window [ key ]
127
+ delete window [ key ] ;
115
128
} catch ( e ) { window [ key ] = undefined }
116
129
}
117
130
126
139
return defaultVal ;
127
140
}
128
141
129
-
130
142
////////////////////////////////////////////////////////////////////////////
131
143
//
132
144
// convert to json data
135
147
function toJson ( res ) {
136
148
if ( typeof ref === 'string' ) {
137
149
try {
138
- return JSON . parse ( res )
150
+ return JSON . parse ( res ) ;
139
151
} catch ( e ) {
140
- return eval ( `( ${ res } )` )
152
+ return eval ( '(' + res + ')' ) ;
141
153
} finally {
142
- return res
154
+ return res ;
143
155
}
144
156
} else {
145
- return res
157
+ return res ;
146
158
}
147
159
}
148
160
149
- function printfError ( ) {
150
- window . console && console . error . apply ( console , arguments )
151
- }
152
-
153
- } ) ( ) ;
161
+ } ) ( )
0 commit comments