李恒道
发表于 2021-8-10 19:39:12
涛之雨 发表于 2021-8-9 18:17
```js
const w = unsafeWndow || window,
id = setInterval(() => {
哥哥你对xhr的返回内容劫持有什么好的想法么,我是基础proxy代理,感觉性能太低了
李恒道
发表于 2021-8-10 19:39:16
cxxjackie 发表于 2021-8-9 21:37
好像matches有兼容性问题,如果你的浏览器不支持,在代码前加一句:
哥哥你对xhr的返回内容劫持有什么好的想法么,我是基础proxy代理,感觉性能太低了
李恒道
发表于 2021-8-10 20:31:02
yy550623346 发表于 2021-8-10 18:56
重新上传截图了,
contentwindow穿透,match匹配都可以的
cxxjackie
发表于 2021-8-10 22:33:17
本帖最后由 cxxjackie 于 2021-8-10 22:37 编辑
李恒道 发表于 2021-8-10 19:39
哥哥你对xhr的返回内容劫持有什么好的想法么,我是基础proxy代理,感觉性能太低了 ...
呃,我没怎么用过proxy,所以性能问题不太了解。如果只关心返回内容的话,是不是没必要劫持整个对象,只用Object.defineProperty劫持属性比较好?可以试一下这段代码,我也不确定性能会不会比proxy好:const xhrOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function() {
const xhr = this;
if (arguments == hookUrl) {
const property = xhr.responseType ? 'response' : 'responseText';
const getter = xhr.__lookupGetter__(property);
Object.defineProperty(xhr, property, {
get: () => {
let result = getter.call(xhr);
console.log(result);
return result;
}
});
}
return xhrOpen.apply(xhr, arguments);
};这有个问题就是__lookupGetter__的兼容性不是很好,可能有其他获取getter的办法?还有个比较dirty的做法是open以后延迟100毫秒再劫持onreadystatechange,从readystatechange里面对response做手脚
李恒道
发表于 2021-8-10 22:39:25
cxxjackie 发表于 2021-8-10 22:33
呃,我没怎么用过proxy,所以性能问题不太了解。如果只关心返回内容的话,是不是没必要劫持整个对象,只用 ...
延迟100ms骚到我了
涛之雨
发表于 2021-8-10 23:38:54
李恒道 发表于 2021-8-10 19:39
哥哥你对xhr的返回内容劫持有什么好的想法么,我是基础proxy代理,感觉性能太低了 ...
emmm没有,xhr劫持我都不咋用,因为用起来太麻烦,如果有其他的办法实现我一定会绕过这个。。。如果不行我就自己写插件(也不愿意用xhr劫持)
李恒道
发表于 2021-8-11 00:20:11
涛之雨 发表于 2021-8-10 23:38
emmm没有,xhr劫持我都不咋用,因为用起来太麻烦,如果有其他的办法实现我一定会绕过这个。。。如果不行 ...
{:4_86:}没事了...我是xhr痴迷患者,感觉干个xhr劫持解决大部分东西太舒服了....哥哥晚安早点睡
李恒道
发表于 2021-10-1 21:55:16
cxxjackie 发表于 2021-8-9 21:34
给一个我自己写的函数:
原理是首先用querySelector获取元素,获取不到时用MutationObserver监听插入节点, ...
哥哥我突然有一个问题
mutationObserver的观察函数为啥不直接考虑用queryselector
而要遍历所有的数组和addednodes
感觉不如直接上个queryselector查询是否存在的效率更高吧
cxxjackie
发表于 2021-10-1 22:03:00
李恒道 发表于 2021-10-1 21:55
哥哥我突然有一个问题
mutationObserver的观察函数为啥不直接考虑用queryselector
而要遍历所有的数组和a ...
因为我感觉querySelector会比从addedNodes里找要慢,毕竟范围大了一点,不过实际也没有测试过,可能性能差异小到可以忽略不计的,还得考虑matches的兼容性,现在来看可能确实用querySelector要好一点。
李恒道
发表于 2021-10-1 22:24:30
cxxjackie 发表于 2021-10-1 22:03
因为我感觉querySelector会比从addedNodes里找要慢,毕竟范围大了一点,不过实际也没有测试过,可能性能 ...
懂了...我之前没考虑过querySelector的性能问题,大佬牛逼!