function getEnvs(proxyObjs) { for (let i = 0; i < proxyObjs.length; i++) { const handler = `{ get: function(target, property, receiver) { console.log("方法:", "get ", "对象:", "${proxyObjs[i]}", " 属性:", property, " 属性类型:", typeof property, ", 属性值:", target[property], ", 属性值类型:", typeof target[property]); return target[property]; }, set: function(target, property, value, receiver) { console.log("方法:", "set ", "对象:", "${proxyObjs[i]}", " 属性:", property, " 属性类型:", typeof property, ", 属性值:", value, ", 属性值类型:", typeof target[property]); return Reflect.set(...arguments); } }`; eval(`try { ${proxyObjs[i]}; ${proxyObjs[i]} = new Proxy(${proxyObjs[i]}, ${handler}); } catch (e) { ${proxyObjs[i]} = {}; ${proxyObjs[i]} = new Proxy(${proxyObjs[i]}, ${handler}); }`); } } proxyObjs = ['window', 'document', 'location', 'navigator', 'history', 'screen'] getEnvs(proxyObjs);
使用:
报错确实localhost的host,直接补这个
location = { "host": 'xxxx', }
结果:
成功生成sign的值
jsdom补环境
————————————————
const jsdom = require("jsdom"); const { JSDOM } = jsdom; const dom = new JSDOM('<!DOCUMENT html><p>Test</p>') window = dom.window document = window.document navigator= window.navigator