Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

关于劫持

  「劫持」这个词好像已经流行很久了,我刚学编程那会儿就开始听到各种劫持了。不过当时是做系统方面偏向底层的东西,所以劫持就是一些系统 API 钩子之类的。现在搞 Web,实际上劫持的概念也同样存在。劫持默认方法,劫持浏览器行为等都属于劫持。

旋转火锅

  今天吃了旋转火锅,正常吃东西本该很斯文的,可是看到想吃的东西在转,根本停不下来。于是就直接伸手把整个盘子抢下来,直到吃够了再把盘子放回去,这里我就执行了一次劫持操作吧。其实由此就可看出所谓「劫持」其实是一种很不文明的行为(表吐槽我不文明,只是在吃方面不客气而已)。我刚开始搞移动端的时候发现 UC 浏览器劫持了多点触控,顿时就发了条说说喷 UC,反正我是很愤怒的(也许被我夺走食物的人也同样愤怒吧)。「劫持」这种行为总是这样得罪人,如果没有必要时尽量不要乱劫持东西。

悄悄地,悄悄地

  劫持的前提是不对事务的本质造成影响,比如我劫持了食物,并没有不还回去。同样那些 API 钩子劫持了 API 调用也会把相应的操作转发给真正的 API。手段够高的劫持根本不会留下任何蛛丝马迹,各种恶意程序做「免杀」实际上就是在用手段够高的劫持来瞒过杀软。要是我可以瞬间夺下食物吃了再还回去,或者在不被任何人发现的情况下搞定,那就完全没问题嘛,只是我的手段没那么高而已。当年喷 UC 是因为它的劫持明目张胆,直接影响了我的正常使用。其实所有浏览器应该都有劫持,只是其他浏览器在悄悄地进行而已。

在能确保不出事的情况下,爱怎么劫持都行

  比如 IE8 的 XMLHttpRequest 对象不支持 CORS,于是我们可以劫持这个对象(它在 global 中是可写的),在 IE8 上使用 XDomainRequest 代替它,并转发相应的参数和配置等。最终的响应也映射回去,这样就实现了一个对 XMLHttpRequest 不错的封装。这种劫持我是完全能接受的,因为它不造成副作用(即使有也只是性能上的差异而已),它肯定不会出事,所以爱怎么用都行。当然,要确保「不会出事」是很难做到的,所以虽然我并不反对劫持,但使用时一定要谨慎,不要把自己不文明的行为让别人发现了!

网名:
3.80.55.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^