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 试试呢?
2021-05-10 14:16:07 +08:00
回复了 xieqiqiang00 创建的主题 JavaScript JS 有什么手段可以判断一个函数是不是原生代码吗?
@musi 就算再多页面,你肯定也是按模板来的,难道你这多页面要每个页面都单独完整写一份 html ?
而且你谈侵入性,我的方案只是暴露原对象引用出来而已,并没有做哪怕一丁点的修改,这叫有侵入性?
至于你前半段说的,我都已经说过一遍了。。


@gzzhanghao 为啥不能控制?详见 #72
2021-05-10 10:26:29 +08:00
回复了 xieqiqiang00 创建的主题 JavaScript JS 有什么手段可以判断一个函数是不是原生代码吗?
@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 的,还是感觉太繁琐太累赘了
2021-05-10 10:07:27 +08:00
回复了 xieqiqiang00 创建的主题 JavaScript JS 有什么手段可以判断一个函数是不是原生代码吗?
@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 的源码,没有其他方式了
2021-05-08 18:32:38 +08:00
回复了 xieqiqiang00 创建的主题 JavaScript JS 有什么手段可以判断一个函数是不是原生代码吗?
只有一种情况是我说的方案失效的,就是如果是说 electron 是在加载 html 之前就覆盖了内置函数
2021-05-08 18:30:34 +08:00
回复了 xieqiqiang00 创建的主题 JavaScript JS 有什么手段可以判断一个函数是不是原生代码吗?
@xieqiqiang00 ? 哪里有问题可以提出来,不提出来咋给你解决。。
2021-05-08 18:29:08 +08:00
回复了 xieqiqiang00 创建的主题 JavaScript JS 有什么手段可以判断一个函数是不是原生代码吗?
楼上的各位都想啥呢。。
也就 @luofeii 这位大佬的靠谱点,跟我的逻辑很像,但你的逻辑是行不通的,因为并不是同一个对象

let iframe = document.createElement('iframe');
iframe.id = 'iframe';
document.body.append(iframe);
iframe = document.getElementById('iframe');
iframe.contentWindow.XMLHttpRequest === window.XMLHttpRequest // false
2021-05-08 18:04:55 +08:00
回复了 xieqiqiang00 创建的主题 JavaScript JS 有什么手段可以判断一个函数是不是原生代码吗?
@xieqiqiang00 都在所有脚本执行之前了,你这疑问不成立啊
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1038 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 16ms · UTC 22:31 · PVG 06:31 · LAX 14:31 · JFK 17:31
Developed with CodeLauncher
♥ Do have faith in what you're doing.