V2EX BoringTu
 BoringTu 最近的时间轴更新
BoringTu

BoringTu

V2EX 第 307764 号会员,加入于 2018-04-11 14:12:16 +08:00
BoringTu 最近回复了
2021-06-04 16:20:19 +08:00
回复了 BoringTu 创建的主题 Node.js 关于 npm install 会报 ENOTFOUND 或 ECONNRESET 的问题
@nznd 不想换源啊,换源不就失去了翻墙的意义了么?

不过退一万步说,刚才我测试的时候也测过了,结果是一样的,因为要走我的代理
如果我不设置代理,一样失败率百分百报 ENOTFOUND
2021-05-10 14:35:45 +08:00
回复了 BoringTu 创建的主题 Javascript 为什么你们要选择 TypeScript?
@Pythoner666666 那你用 coffee 试试呢?
@musi 就算再多页面,你肯定也是按模板来的,难道你这多页面要每个页面都单独完整写一份 html ?
而且你谈侵入性,我的方案只是暴露原对象引用出来而已,并没有做哪怕一丁点的修改,这叫有侵入性?
至于你前半段说的,我都已经说过一遍了。。


@gzzhanghao 为啥不能控制?详见 #72
@binux 你怎样控制用户的浏览器呢?你说插件,你只能在自己电脑上安装插件,你怎样让用户也安装?如果你随意的就能控制他人浏览器,那浏览器这个行业也不用干了。。
你只能在你电脑的浏览器上装你想装的插件,然后你在自己浏览器上通过插件篡改了原生函数,这都可以啊,但能说明啥问题。。
这个其实没啥好杠的,而且都不需要去查什么资料去验证
这就好像之前我碰到有问这么个事儿的,说我通过自己浏览器开发者工具拿到了我登录后的 token,然后发给别人,不就把我的登录信息暴露出去了么。。我。。当时是真不知道该回啥。。
2021-05-10 10:21:33 +08:00
回复了 BoringTu 创建的主题 Javascript 为什么你们要选择 TypeScript?
@TonyG 我看懂了所以那么回的你啊,咱这么说吧,按你的说法,如今站在 web 前端顶层的人物应该全都看不起 js 而全都用 ts 来代替 js,但实际上你稍微动脑想想,你觉得这种情况是成立的么?如果真是这样,ts 应该在很多年前就出现了,而且也不会出现 coffee 、Clojure 这些就不会出现。既然你都聊到这了,你可以去研究一下 coffee 的设计理念,在我看来是恰到好处的,扬长避短。但因为缩进语法给很多人劝退了。

@adoal 感谢用心回复~ 我现在的态度也偏向多人团队管理尤其是能力差距较大的情况下用 ts,但我个人的项目应该还是不会考虑用 ts 的,还是感觉太繁琐太累赘了
@luofeii #41 但是你怎么做对比呢?
如果不考虑是否是 electron 环境,只是浏览器环境的话,你可以参考我提供的思路,这是最简单也最有效的解决方案
要的就是同一个对象的引用,这样才能判断出是否是同一个内存地址

@binux 为啥做不到呢?在.html 文件里直接写死就好啊,你是考虑会有动态插入 script 标签么?这不需要考虑啊,HTML 在浏览器内核上的渲染逻辑没有那么玄幻,都是自上而下的,就算有动态插入也都是执行到了具体脚本才会有的动作,但早在这一步之前,我想要执行的那句脚本就已经执行完毕了

@rekulas 嗯,我不推荐 iframe 的这种做法哇,虽然按我最早发的那个思路,一样是可以避免你提的这个可能的,我拿到内置 document.createElement 的原生函数引用不就好了嘛。而且你的思路最后的那个判断本来就不是应该的,这个判断木有意义:“XMLHttpRequest === iframe.contentWindow.XMLHttpRequest”,如果不执行你的第一句那个重写 createElement,前面这个判断是永远是 false 的,因为并不是同一个环境,所以也就不是同一个对象

@aaronlam
@musi
以及楼上某些木有点名到的童鞋,你们都没注意听讲啊。。
我给各位总结然后回答一下楼主这个问题(两种情况):

1. 如果只是判断前端环境中是否有脚本重写了 XMLHttpRequest,那最简单也最靠谱的就是我提供的那个方案:
“在 HTML head 标签里所有 script 标签的最前面加上一个 script,里面:
window.originXMLHttpRequest = window.XMLHttpRequest;
然后在你想判断的时候:
originXMLHttpRequest === XMLHttpRequest”
(顺便聊一下 iframe 的这个方案,用来判断的话是没戏的,上下文环境不同,就算没被重写,也没法判断,因为不可能是同一个对象。iframe 的方案,你只能是 iframe 环境里的 XMLHttpRequest 拿来直接当做原生内置函数来用

2. 如果是说 electron 直接修改了浏览器内核里的 XMLHttpRequest,那就无解了,人家都不是在前端环境修改的,你怎么判断?你就算 toString 了,一样拿到的是这个:'function XMLHttpRequest() { [native code] }'。这种情况你想要知道是否被重写了,只能肉眼去看 electron 的源码,没有其他方式了
只有一种情况是我说的方案失效的,就是如果是说 electron 是在加载 html 之前就覆盖了内置函数
@xieqiqiang00 ? 哪里有问题可以提出来,不提出来咋给你解决。。
楼上的各位都想啥呢。。
也就 @luofeii 这位大佬的靠谱点,跟我的逻辑很像,但你的逻辑是行不通的,因为并不是同一个对象

let iframe = document.createElement('iframe');
iframe.id = 'iframe';
document.body.append(iframe);
iframe = document.getElementById('iframe');
iframe.contentWindow.XMLHttpRequest === window.XMLHttpRequest // false
@xieqiqiang00 都在所有脚本执行之前了,你这疑问不成立啊
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4358 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 16ms UTC 10:04 PVG 18:04 LAX 03:04 JFK 06:04
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86