• 对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;
  • 相关阅读:
    解析 AJAX 返回回来的 xml字符串
    JS 与 后台如何获取 Cookies
    鼠标上下滚轮事件
    MVC Control 返回各种数据
    ildasm 查看程序集 里面的图标的意思
    对象的序列化和反序列化 itprobie
    文件上传通用类 itprobie
    文件下载的四种方式 itprobie
    委托事件的实际运用 itprobie
    使用NPOI实现excel的导入导出 itprobie
  • 原文地址:https://www.cnblogs.com/yuri2016/p/14178665.html
Copyright © 2020-2023  润新知