对iframe里的fetch和xmlhttprequest拦截并对request/reponse进行包装

写了一个通常的函数可以对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;

 

posted @ 2020-12-23 15:00  Yuri_trender  阅读(1675)  评论(2编辑  收藏  举报