對iframe裡的fetch和xmlhttprequest攔截並對request/reponse進行包裝
阿新 • • 發佈:2020-12-23
寫了一個通常的函式可以對iframe裡的fetch和xmlhttprequest攔截並對request/reponse進行包裝
rewriteFetchandXmlhttp(iframeWin) { if (!iframeWin) { console.error("iframe handle was lost"); return; } const token=sessionStorage.getItem("uic-token") || ''; if(!token || token=='undefined'){return; } // const iframeWin=iframeWin; const _fetch=iframeWin.fetch; iframeWin.fetch = function (url, options = {}) { // console.log("fecth url->:",url); //console.log("fecth url->:",{options}); if (options.headers) { options.headers['uic-token'] = token; } else { options.headers = { "uic-token": token } } return new Promise((resolve, reject) => { _fetch(url, options, resolve, reject).then((res) => { resolve(res) }).catch((err) => { reject(err) }); }); }; const send= iframeWin.XMLHttpRequest.prototype.send; iframeWin.XMLHttpRequest.prototype.send = function (data) { // console.log("add header token:",token); this.setRequestHeader("uic-token", token); send.call(this, data); }; //iframeWin.XMLHttpRequest = XMLHttpRequest; return; // //console.log("XMLHttpRequest開始:"); // const xmlreqc = iframeWin.XMLHttpRequest; // const XMLHttpRequest = function () { // this.xhr = new xmlreqc(); // return this; // }; // //var xhr = new window.XMLHttpRequest(); // XMLHttpRequest.prototype.open = function (method, url, async) { // //console.log("open: XMLHttpRequest url->:" + url); // return this.xhr.open(method, url, async); //send it on // }; // XMLHttpRequest.prototype.setRequestHeader = function (header, value) { // //console.log('setRequestHeader: XMLHttpRequest header:->',header + ": " + value); // return this.xhr.setRequestHeader(header, value); // } // XMLHttpRequest.prototype.send = function (postBody) { // let myXHR = this; // //console.log('send: XMLHttpRequest header 注入token:->'+ token); // this.xhr.setRequestHeader('token', token); // this.xhr.onreadystatechange = function () { myXHR.onreadystatechangefunction() }; // this.xhr.send(postBody); // }; // XMLHttpRequest.prototype.onreadystatechangefunction = function () { // //console.log('onreadystatechangefunction:'); // try{ // this.readyState = this.xhr.readyState; // this.responseText = this.xhr.responseText; // this.responseXML = this.xhr.responseXML; // this.status = this.xhr.status; // this.statusText = this.xhr.statusText; // }catch(e){ // console.log(e) // } // this.onreadystatechange(); // }; // iframeWin.XMLHttpRequest = XMLHttpRequest;