<!DOCTYPE HTML> <HTML LANG = "ZH"> <HEAD> <METAのcharset = "UTF-8"> <META NAME = "ビューポート"コンテンツ= "幅=デバイス幅、初期スケール= 1.0"> <メタHTTP-当量= "X - UA互換"コンテンツ= "IE =エッジ"> <タイトル> </ TITLE> </ HEAD> <BODY> </ BODY> <スクリプトタイプ= "テキスト/ JavaScriptを" SRC = " JS / jQueryの-3.3.1.min.js "> </ SCRIPT> <スクリプトタイプ="テキスト/ JavaScriptを「> //自動的にAJAXのスクリプトをダウンロードし 、フラグに(関数($、ホスト){ )旗で(IF! { //あなたがダウンロードデータを閉じた場合は、何もしない、それ以外の場合は、AJAXリクエストがデータダウンロード返さインターセプトし 、リターンを; } VARアヤックス= $アヤックス。//キャッシュ元アヤックス $アヤックス=機能(OPT){ opt.success =機能(RES){ VAR =成功opt.success ||機能(){}; VaRのURL = opt.url || ""; {しようと するvar名= url.splitを( "?")[0]; IF(ホスト){ 名前= name.replace(ホスト、 ""); } 名前= name.replace(/ \ // gを、 "_")。 downData(RES、 `$ {名前} .json`)。 }キャッチ(E){ console.warn(E); } 成功(RES)。 } AJAX(OPT)を返します。 } 関数downData(データ名){ IF(typeof演算データ== "オブジェクト"){ データ= JSON.stringify(データ)。 } VARブロブ=新たなBLOB([データ]、{ タイプ: 'text / htmlの、文字セット= UTF-8' })。 window.URL = window.URL || window.webkitURL; するvar A =ドキュメント。 a.setAttribute( "ダウンロード"、名前|| "data.json"); a.href = URL.createObjectURL(BLOB)。 a.click(); } })($、真、 "https://www.easy-mock.com"); //自动下载数据 $アヤックス({ URL: "https://www.easy-mock.com/mock/5bb02bc0a0afc503f502a292/example/demo/secret"、 成功(RES){ はconsole.log(RES); } } ) </スクリプト> </ HTML>
XHRを使用し、ネイティブの傍受をフェッチ
//自动下载AJAX的脚本 //命名空间 window.ajax_interceptor_manny = { 設定:{ switchOn:偽、 switchQuery:偽 }、 originalXHR:window.XMLHttpRequest、 myXHR:関数(){ にconsole.log(」--- AJAX拦截---「) pageScriptEventDispatched = falseをしましょう。 CONST modifyResponse =()=> { //this.responseText = overrideTxt。 //this.response = overrideTxt。 (pageScriptEventDispatched){もし 返します。 } pageScriptEventDispatched = TRUE。 ajax_interceptor_manny.download(this.responseText、this.responseURL)。 } 属性が外部に露出し、これにコピーされ、XHRする新しいパラメータネイティブを必要としません// XMLHttpRequestを 、constのajax_interceptor_manny.originalXHRのXHR =()新しい ため(LETのXHR attrの中){ IF(ATTR ===「onreadystatechangeに「){ xhr.onreadystatechange =(引数...)=> { (this.readyState == == 200 this.status &&あれば4){ //要求が成功した (ajax_interceptor_manny.settings.switchOn IF){ //オープン傍受 ModifyResponse(); } } this.onreadystatechange && this.onreadystatechange.apply(この、引数); } 続行; }そうでなければ(ATTR === 'のonload'){IF xhr.onload =(引数...)=> { //リクエストが成功しました IF(ajax_interceptor_manny.settings.switchOn){ //开启拦截 modifyResponse()。 } this.onload && this.onload.apply(この、引数)。 } 続けます。 } IF(typeof演算のXHR [ATTR] === '関数'){ この[ATTR] = XHR [ATTR] .bind(XHR)。 }他{ (ATTR === 'responseText' || ATTR === '応答'){もし VARのK = "_" + ATTR。 Object.defineProperty(この、ATTR、{ 得る:()=>この[K] ==未定義XHR [ATTR]:この[k]は、? セット:(ヴァル)=>この[K] =ヴァル、 })。 }他{ Object.definePropertyは(これは、ATTR、{ 取得します: セット:(ヴァル)=> XHR [ATTR] =ヴァル、 })。 } } } }、 originalFetch:window.fetch.bind(ウィンドウ)、 myFetch:関数(...引数){ にconsole.log( "--- ---拦截フェッチ") ajax_interceptor_manny.originalFetch(...引数を返します).then((応答)=> { IF(response.ok){ response.clone()テキスト()を((RES)=> {。。 ajax_interceptor_manny.download(RES、response.url); })。キャッチ((E)=> { console.warn(E) }); } 戻り応答; }); }、 (データ、URL)をダウンロード{ {みてください IF(ajax_interceptor_manny.settings.switchOn){ IF(typeof演算データ== "オブジェクト"){ データ= JSON.stringify(データ)。 } VARブロブ=新たなBLOB([データ]、{ タイプ: 'text / htmlの、文字セット= UTF-8' })。 window.URL = window.URL || window.webkitURL; VAR名= URL; (もし!:> = 0 || url.indexOf( "https://で")(url.indexOf( "// HTTP")> = 0)){ //不存在域名 URL = window.origin + URL。//手动添加一个、避免URL解析出错 } {しようと するvar uは=新しいURL(URL); 名前= u.pathname。 もし(ajax_interceptor_manny.settings.switchQuery){ //パラメータを取る必要があります 名=名+ "$" + u.search.replace(」 }キャッチ(E){} 名前= name.replace(新しい正規表現( "//"、 "G")、 "/")。 名前= name.replace(新しい正規表現( "/"、 "G")、 "_")。 名前=名前+「.json」。 するvar A =のdocument.createElement( "A"); a.setAttribute( "ダウンロード"、名前|| "data.json"); a.href = URL.createObjectURL(BLOB)。 a.click(); } }キャッチ(E){ console.error( "下载数据失败"、E)。 } }、 setSetting(データ){ IF(typeof演算データ== "オブジェクト"!){ リターン。 } } } のinit(){ 窓。XMLHttpRequestを= ajax_interceptor_manny.myXHR。 window.fetch = ajax_interceptor_manny.myFetch。 } } ajax_interceptor_manny.init()。 ajax_interceptor_manny.setSetting({ switchOn:真 })。
これは、ブラウザのプラグインとして書かれ、傍受することができます。
プラグインコード住所: https://gitee.com/muand/ajaxDown/tree/master/ajaxDown