用于三方代码或者chrome extension在无法修改原代码逻辑的情况下劫持页面原有ajax请求,对发送内容和响应内容进行修改。
劫持XMLHttpRequest
Kind: global function
| Param | Type | Description |
|---|---|---|
| ...rule | Object |
劫持规则 |
Properties
| Name | Type | Description |
|---|---|---|
| rule.url | string | RegExp | Array.<string> |
原请求地址,若传入的参数未携带search参数,则匹配时也会忽略search参数;正则匹配时不会忽略search参数; 若域名和location域名相同,会忽略域名;字符串时支持结尾统配符* |
| [rule.before] | overrideRequest |
发送前的处理 |
| [rule.after] | overrideResponse |
对返回值的处理, 默认情况下rule.after仅在readyState===4的时候调用,可通过rule.callAfterEveryState修改 |
| [rule.callAfterEveryState] | boolean |
每次readystatechange变更时都调用rule.after去修改res |
Example
hijackAjax({
url: '/article/list',
before: req => {
req.url = 'recommend/list';
let data = JSON.parse(req.data);
data.name = "test";
req.data = JSON.stringify(data)
return req;
},
after: res => {
let data = JSON.parse(res.responseText);
data.name = 'test';
res.responseText = JSON.stringify(data);
return res;
}
})- overrideRequest ⇒
req - overrideResponse ⇒
*
Kind: global typedef
Returns: req - 修改后的请求数据,在传入的req上修改后返回
| Param | Type | Description |
|---|---|---|
| req | Object |
原有请求数据 |
Properties
| Name | Type | Description |
|---|---|---|
| req.url | string |
原有url,字符串,不包含search参数 |
| req.method | string |
原有method |
| req.headers | Object |
原有headers,键值对象,不会传入null |
| req.search | Object |
原有search参数,键值对象,不会传入null |
| req.withCredentials | boolean |
原有的withCredentials |
| req.user | string | null |
原有的open传入的user,默认为null |
| req.password | string | password |
原有的open传入的password, 默认为null |
| req.data | * |
原有的data |
| req.async | boolean |
原有的async |
| req.mimeType | string |
原有的mimeType, overrideMimeType设置的mimeType |
| req.timeout | number |
原有的超时时间 |
Kind: global typedef
Returns: * - 修改后的res,在传入的res上修改后返回
| Param | Type | Description |
|---|---|---|
| res | Object |
原有的res |
Properties
| Name | Type | Description |
|---|---|---|
| res.headers | Object |
原有headers,键值对象,永远不会传入null |
| res.status | number |
原有status |
| res.statusText | string |
原有statusText |
| res.responseType | string |
原有responseType |
| res.responseURL | string |
原有responseURL |
| res.response | string |
原有response |
| res.responseText | string |
原有responseText |
| res.responseXML | string |
原有responseXML |