如何建設(shè)網(wǎng)站山東濟南興田德潤官網(wǎng)域名檢測工具
proxy 對象用于創(chuàng)建一個對象的代理,是在目標(biāo)對象之前架設(shè)一個攔截,外界對該對象的訪問,都必須先通過這個攔截。通過這種機制,就可以對外界的訪問進(jìn)行過濾和改寫。
ES6 原生提供 Proxy 構(gòu)造函數(shù),用來生成 Proxy 實例。
var proxy = new Proxy(target, handler);
target參數(shù)表示所要攔截的目標(biāo)對象,handler參數(shù)也是一個對象,用來定制攔截行為。
以下使用示例:
export function newproxy(obj) {// 必須是http開頭或者h(yuǎn)ttps開頭,結(jié)尾為'/'// 把host替換成指定數(shù)值var reg = /^http(s)?:\/\/(.*?)\//;var ToReplace = "https://abc.com/";let handler = {get: function (target, propKey, receiver) {if (target[propKey]) {if (target[propKey].constructor == Array) {target[propKey] = target[propKey].toString()}if (target[propKey].indexOf("http") !== -1) {target[propKey] = target[propKey].replace(reg, ToReplace);}if (target[propKey].indexOf("http") !== -1 &&target[propKey].indexOf(",") !== -1) {var imglist = target[propKey].split(',');target[propKey] = "";imglist.forEach((element, index) => {if (element && index == 0) {target[propKey] += element.replace(reg, ToReplace);} else {target[propKey] += "," + element.replace(reg, ToReplace);}});}if (target[propKey].indexOf("<img") !== -1 &&target[propKey].indexOf("http") !== -1) {var regContent = /<img [^>]*src=['"]([^'"]+)[^>]*>/gi;target[propKey] = target[propKey].replace(regContent,function (img, src) {var regImg =/<img([^>]*)\ssrc=(['"])(?:[^\2\/]*\/){3}([^\2]+)\2/gi;//()捕獲匹配 即匹配到的內(nèi)容保存到$1...; (?:)非捕獲匹配 即匹配到的內(nèi)容不保存//([^>]*)匹配除>的任意字符//(['"])匹配‘或“//(?:[^\2\/]*\/)匹配/前面除'和“和/的任意字符 {3}代表匹配和前面一樣的 匹配3組//如果是\2,就是匹配第二個組()匹配到的內(nèi)容// console.log(1, RegExp.$1);//console.log(2, RegExp.$2);// console.log(3, RegExp.$3);let newSrc = img.replace(regImg,`<img$1 src=$2${ToReplace}$3$2`);return newSrc;});}}return target[propKey];},};return new Proxy(obj, handler);
}
使用
var newback = newproxy(data); //data為后端返回的數(shù)據(jù) data{img:http://1234656.com/....jpg}
const newImg= newBack.img; //把img的域名替換成https://abc.com/