IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者
首页 / WEB前端开发
IT 2014-09-17 13:58:03 / 累计浏览 14,680

cookie窃取和session劫持

这篇讲的是网络安全中一个经典但常被忽视的威胁——Cookie窃取与Session劫持。文章从基础讲起,细致梳理了Cookie在HTTP请求/响应中的传递机制,并解释了会话Cookie、持久Cookie、安全属性(Secure/HttpOnly)以及第三方Cookie、超级Cookie等多种类型的核心区别与应用场景。 其核心价值在于清晰剖析了风险:当用于维持用户登录状态的Session Cookie被窃取时,攻击者便能劫持整个会话,以你的身份操作系统。文章重点指出了最常见的攻击入口是XSS漏洞,攻击者可通过注入的恶意脚本直接读取Cookie并将其外传。 此外,文章还延伸介绍了Cookie用于个性化设置和用户行为追踪的用途,并提及了如“僵尸Cookie”等更复杂的持久化追踪技术。它不仅是前端开发者理解浏览器安全模型的重要参考,也为后端开发者配置安全的Cookie策略提供了直接依据。

本机暂存
IT 2014-09-17 13:44:52 / 累计浏览 2,380

理解JavaScript 中的 this

这篇讲的是JavaScript里那个让人又爱又恨的`this`关键字。作者从`this`的基本工作机制切入,核心观点是:它的指向并非由函数定义决定,而是取决于函数被调用的“方式”。 文章用简洁的代码示例对比了关键差异:当函数作为对象的方法调用时,`this`指向该对象;若将方法赋给变量再调用,`this`却会“叛逃”至全局。在构造函数中,`this`指向新创建的实例,但若漏写`new`,又会指向全局——这种“脆弱性”正是许多困惑的根源。 作者进一步剖析了用`call`、`apply`和`bind`这三个工具显式绑定`this`的场景,它们适用于需要在不同上下文中复用函数,或提前锁定`this`指向的情况。最后,文章点明了一个进阶痛点:在嵌套函数(作用域链)中,`this`无法自动继承,通常需要借助`self`或`that`变量来“捕获”外层的引用。 通篇没有空泛的理论,而是紧扣开发者日常会遇到的实际陷阱和解决方案,对理清`this`的作用规则很有帮助。

本机暂存
IT 2014-09-17 13:40:44 / 累计浏览 1,340

javascript DOM操作中的insertAdjacentHTML方法

这篇讲的是如何用更现代的方式在DOM中插入HTML内容。作者从大家熟悉的innerHTML和innerText方法的局限性出发,引出了功能更强大的insertAdjacentHTML。 它最大的特点是支持四个精确的插入位置参数:beforeBegin、afterBegin、beforeEnd、afterEnd,可以让你在目标元素的外部前后、内部开头或结尾处插入内容,控制粒度非常细,避免了innerHTML可能覆盖原有内容的风险。 文章还贴心地分享了一个兼容老版本IE的自定义insertHTML函数实现。这个函数的思路很巧妙:对于不支持原生方法的浏览器,它通过创建Range对象并使用createContextualFragment来解析和插入HTML片段,从而模拟了四个位置的插入行为,确保了代码的跨浏览器可用性。 如果你还在频繁使用innerHTML拼接界面,或者对DOM插入位置有更灵活的需求,这篇对insertAdjacentHTML的实操讲解会提供一个清晰直接的解决方案。

本机暂存
IT 2014-08-15 13:52:56 / 累计浏览 2,460

浏览器的重绘(repaints)与重排(reflows)

这篇讲的是浏览器渲染页面的核心机制——重绘与重排,这是前端性能优化中必须理解的概念。文章从页面加载流程入手,清晰地区分了两个关键环节:重排是元素几何属性变化导致渲染树需要重新计算,性能开销显著;重绘则是元素外观改变触发的重新绘制,不一定引发重排。但重排必然伴随重绘,理解这种连锁反应至关重要。 作者列举了几种典型的重排触发场景,比如修改DOM几何属性、改变DOM结构,甚至只是读取 `offsetWidth` 等属性值,也会强制浏览器同步计算布局,打乱其优化节奏。这些细节揭示了性能问题的隐形来源。 文章的价值不止于概念解析,更提供了切实的优化策略:将多次样式修改合并、对动画元素使用绝对定位以隔离影响、在内存中操作节点后再插入文档,以及隐藏元素进行复杂操作等。这些实践建议直接指向如何在开发中最小化重排次数和影响范围,帮助开发者规避常见的性能陷阱。

本机暂存
IT 2014-08-15 13:51:14 / 累计浏览 3,300

页面重绘和回流以及优化

这篇讲的是前端性能优化中的关键概念:页面重绘与回流。作者从浏览器渲染页面的流程切入,清晰解释了DOM树、样式结构与渲染树(Render Tree)的构建关系,并指出渲染树不包含 `display:none` 等隐藏节点这一重要细节。 文章的核心是区分回流与重绘:当元素的几何属性(如尺寸、位置)改变时触发回流,浏览器需要重新构建部分渲染树;而仅改变外观属性(如背景色)则只触发重绘。作者强调“回流必将引起重绘”,并列举了六种常见触发回流的场景,如DOM增删、窗口尺寸变化等。 为说明性能影响,文章通过一段JS代码演示了连续样式修改如何导致多次不必要的回流。同时,作者揭示了浏览器内部的优化机制——通过维护操作队列来合并回流操作,并提醒开发者某些属性访问(如 `offsetWidth`)会强制刷新该队列。 最后,文章给出了具体的优化策略:批量修改样式(如使用 `className` 或 `cssText`)、采用离线操作(如 `DocumentFragment`)、缓存布局信息,以及让动画元素脱离文档流。这些方法能有效减少渲染树的重构规模,提升页面性能。

本机暂存
IT 2014-04-08 22:59:37 / 累计浏览 2,200

前端开发中Cookie那些事儿

这篇讲的是前端开发中cookie的那些事儿。作者从实际项目经验出发,详细解释了cookie的各种属性及其用法,特别是那些容易踩坑的地方。例如,cookie的生存期由expires和max-age属性控制,但max-age用秒表示,已成为现代标准;max-age为正时cookie会持久化存储,为负时仅在当前会话有效,为0时则删除cookie。在ie6浏览器中,session cookie在不同打开方式下行为不一,作者曾为此吃过大亏,调试过程颇为曲折。 文章还深入解析了domain、path、secure和httpOnly等属性。domain属性允许跨子域共享cookie,但需谨慎设置域以确保安全;path属性定义cookie的关联路径;secure确保cookie仅通过HTTPS传输;httpOnly则防止JS脚本访问,增强安全性。作者分享了一个实战教训:因忽略httpOnly属性,尝试用JS读取cookie失败,耗时近两小时才定位问题。 在性能优化方面,文章强调cookie会随HTTP请求发送,增加网络开销,因此不建议将其作为客户端存储方案,并推荐了localStorage等本地存储作为替代。此外,还解释了cookie值的编码解码必要性,以及同名cookie在不同域或路径下的区别规则。 通过结合理论解释和踩坑经历,这篇文章为前端开发者提供了实用的cookie操作指南,帮助大家避开常见陷阱,在复杂应用中更高效地管理状态和提升性能。

本机暂存
IT 2013-08-29 13:34:04 / 累计浏览 2,860

设置双核浏览器的浏览模式

这篇讲的是前端开发者长期以来的一个“幻想”——双核浏览器能否智能识别页面技术,自动切换到更适合的内核。作者从一个知乎问题出发,发现不少开发者都期望浏览器能自动处理CSS3兼容性,但现实中多数双核浏览器并无此“智能”。 文章的核心发现在于,虽然自动识别不普遍,但开发者可以主动“告知”浏览器。具体来说,以360安全浏览器6.5版本为例,只需在网页的``标签内添加一行``代码,即可强制使用极速(Webkit)内核渲染页面。`content`属性支持`webkit`、`ie-comp`和`ie-stand`三个值,分别对应极速、兼容和IE模式。 作者实测该方法有效,但也指出一个小缺陷:修改代码后需要刷新页面才能生效。文章最后提到搜狗、QQ等浏览器尚未跟进此特性,并呼吁它们支持,以惠及更多用户。这篇短文为开发者提供了一个明确、可操作的兼容性配置方案。

本机暂存
IT 2013-08-26 23:09:39 / 累计浏览 3,540

JavaScript 中的陷阱

这篇讲的是JavaScript开发中那些因为语言特性而容易“掉坑”的典型场景。作者从JavaScript“弱语言”的灵活与宽松出发,指出了几个开发者常会忽略的陷阱细节。 比如,全局变量的隐式创建并不局限于省略`var`关键字,`var a = b = 0;`这样的连写同样会让`b`意外泄露为全局变量。文章还深入剖析了“变量提升”与“函数提升”机制——你可能以为在函数里使用`alert`会输出外部变量,但实际结果往往是`undefined`,因为该作用域内的变量声明已被提前解析。函数声明也遵循同样的提升规则,甚至允许后面的声明覆盖前面的,导致行为与直觉相悖。 这篇文章的价值在于,它没有泛泛而谈,而是用一连串精准的代码实例,揭示了JavaScript在变量作用域、解析顺序方面的核心机制。它提醒开发者,要写出健壮的代码,就必须理解这些“坑”背后的语言设计逻辑,养成逐一声明变量、手动管理提升作用域的习惯。

本机暂存
IT 2013-08-14 13:49:43 / 累计浏览 3,000

被边缘化的前端

这篇文章以一句引人深思的断言开篇:前端开发是互联网技术领域中最容易被边缘化的工种。作者从产品开发全链条的视角出发,指出前端往往处于下游环节,难以把握产品走向,甚至常被其他职能人员轻视其价值——“这个做起来不是很简单么”。这种尴尬处境,在大多数非前端专精的公司里尤为明显。 文章的核心观点并非一味悲观,而是借“堂主”之口敲响警钟:随着信息呈现媒介从浏览器向多端扩展,前端的传统舞台面临萎缩风险。作者犀利地指出,前端角色的可替代性恰恰源于其与产品核心逻辑的距离。文中列举了前端在合作中被忽视、工作量被他人估算等具体现象,生动地刻画了职业困境。 真正的启发在于文末的呼吁:前端工程师需要打破“拒绝陌生领域”的本能。文章建议,与其固守即将被稀释的阵地,不如主动向后端、架构或产品方向延伸能力边界。作者认为,这种危机感并非制造焦虑,而是对抗边缘化的必要清醒——毕竟,在技术世界里,角色的边界从来不是固定的。

本机暂存
IT 2013-07-08 22:43:51 / 累计浏览 3,180

javascript函数的throttle和debounce

这篇讲的是JavaScript开发中两个常用的性能优化技巧:函数节流(throttle)与函数去抖(debounce)。文章从一个常见的性能优化问题——频繁触发的 `window.resize` 和 `scroll` 事件——切入,形象地将这些持续触发的事件比喻为“机关枪扫射”,而节流就像控制射击频率的扳机。 作者明确指出了两者的核心差异:throttle 是控制函数在连续调用时,按固定时间间隔执行(例如每隔400ms执行一次),适合处理鼠标移动、窗口拖拽等持续触发的场景;而 debounce 则是控制函数在连续调用结束后,必须等待一段指定的空闲时间才执行,特别适用于文本输入、搜索自动补全等场景,能有效过滤掉用户的“快速连续操作”。 文章不仅解释了概念,还提供了原生的 setTimeout 实现思路作为节流示例,并附上了一个通用且实用的函数代码,通过传递参数同时实现了节流和去抖功能。文末提供的在线 Demo 和扩展阅读链接,让读者可以直观体验效果并深入学习。对于前端开发者而言,理解并正确运用这两个技巧,对提升页面交互性能至关重要。

本机暂存
IT 2013-07-07 22:17:10 / 累计浏览 2,800

HTML 5 的data-* 自定义属性

HTML5的data-*自定义属性为前端开发提供了一种标准化的数据存储方式。这篇文章从实际用法出发,清晰地对比了传统getAttribute/setAttribute方法与HTML5新增的dataset属性两种存取路径。前者兼容所有浏览器,但和非标准的自定义属性区别不大;后者则通过专属API提供了更简洁的对象式访问,并在属性名包含连字符时(如data-date-of-birth)自动转换为驼峰命名(dateOfBirth),但在部分旧版浏览器中尚未得到支持。 文章指出,data-*属性的更大价值在于其语义化及与CSS选择器、JavaScript的深度结合。开发者可以直接使用`[data-attr]`选择器来精准定位元素,或根据属性值设置样式,这为动态交互和组件化开发带来了便利。总体来看,文章在厘清基本概念的同时,也给出了兼顾兼容性与未来标准的实践建议。

本机暂存
IT 2013-07-07 21:49:46 / 累计浏览 8,640

jQuery的data()方法

这篇讲的是jQuery中data()方法如何优雅地管理HTML5的data-*自定义属性。它解决了一个实际问题:如何方便、安全地在DOM元素上绑定和读取各种类型的数据,同时避免循环引用可能导致的内存泄漏。 作者从基本用法切入,展示了四种调用方式,核心优势在于data()会智能处理数据类型——字符串值的"true"会被转为布尔值true,"43"会变成数字43,而符合JSON格式的对象或数组字符串也会被自动解析。这意味着你从HTML属性拿到的不再是笨重的原始字符串,而是可以直接使用的JavaScript值,省去了大量手动转换的代码。 更关键的是它的存储机制:data-*属性在首次读取后,数据便交由jQuery在内部缓存,后续操作都基于这个内存对象。这不仅性能更优,也保证了数据的一致性。需要注意的是,如果你想严格保持字符串形式,就该用attr()方法。 文章用一段简洁的示例演示了这种自动转换的直观效果,比如`$("div").data("options").name`直接就能获取到对象属性,非常适合需要在HTML标签上轻量级配置复杂参数的场景。

本机暂存
IT 2013-07-07 17:59:07 / 累计浏览 2,740

IE10 CSS Hack(顺便聊聊IE11的CSS Hack)

这篇来自CSS88的文章,聚焦于开发者在实际项目中遇到的IE10 CSS兼容性难题。作者从同事反馈页面在IE10(甚至IE9)下出现异常的问题出发,系统梳理了针对IE10的CSS Hack方案。 文章核心介绍了两种实用检测方法:一是利用IE私有的条件编译(@cc_on),结合条件注释,为IE10添加专属的class,从而编写隔离样式;二是通过JavaScript检测`document.documentMode`属性,动态判断IE版本。作者还分享了针对IE11预览版不支持@cc_on这一变化所作出的代码调整思路,体现了方案的延续性。 文末附有不同模式下的效果截图和具体代码示例,为处理类似浏览器兼容性问题提供了清晰、可操作的实用思路。

本机暂存
IT 2013-05-28 22:15:26 / 累计浏览 3,420

说说弹窗和新窗口打开拦截

浏览器对非用户主动触发的弹窗和新窗口打开的拦截,常让开发者头疼,尤其在需要与第三方网站交互的场景下。作者从实际产品需求出发,比如传递用户数据、验证流程后跳转,探讨了如何绕过这些限制。核心方案是利用表单提交到新窗口,通过设置target属性为“_blank”,将数据先发送到本站处理页面,处理完毕后再跳转到第三方站点。同时,建议在

本机暂存
IT 2013-05-28 22:08:10 / 累计浏览 3,460

Javascript中的delete操作符

这篇从JavaScript中一个看似简单的delete操作符切入,但探讨的问题却非常根本:变量和对象属性之间的微妙关系。作者首先指明,要理解delete的行为,必须先理清JavaScript执行引擎在幕后创建的Global对象(浏览器中即window对象)和Activation对象(函数执行上下文)。所有全局和局部变量,本质上都是这些对象的属性。 文章通过一个代码示例生动地说明了这一点:在全局作用域中声明变量 `global` 后,可以通过 `this.global` 访问,这直接证明了变量作为Global对象属性的存在。基于这个核心视角,文章随后便能清晰剖析delete操作符的实质——它针对的是对象的属性,而非传统意义上的“变量声明”。这也解释了为什么delete无法删除通过var声明的变量或函数声明,因为它们被标记为不可配置。 作者从底层对象模型出发,把一个操作符的行为讲得透彻且连贯。这不仅帮读者知其然,更知其所以然,对于深入理解JavaScript的作用域链和执行上下文机制也大有裨益。

本机暂存
IT 2013-03-11 13:55:16 / 累计浏览 5,840

JavaScript深度克隆(深度拷贝)一个对象

这篇文章从一道常见的前端笔试题“深度克隆一个对象”切入,解释了为什么很多人面对题目时会感到无从下手。作者首先厘清了JavaScript中的两种数据类型:基本类型(如Number、String)按值传递,而引用类型(如Object、Array)传递的是内存地址。这正是浅拷贝与深拷贝的根本区别所在——直接赋值只会复制地址,修改一个对象会影响到另一个。 接着,文章应该深入探讨了实现深度克隆的几种核心思路,例如使用递归遍历对象属性、利用JSON序列化与反序列化的特性,或是借助结构化克隆算法等现代API。这些方法在性能、处理循环引用以及保留特定对象类型(如Date、RegExp)上各有优劣,文章可能对此进行了分析和对比。 通过阅读这篇文章,开发者不仅能搞懂深度克隆问题的来龙去脉,还能掌握从基础原理到实际代码的完整解决方案,有效避免在状态管理或数据操作时因浅拷贝导致的意外副作用。

本机暂存
IT 2013-02-19 11:58:21 / 累计浏览 4,060

jQuery 1.9升级指南

这篇讲的是如何平稳过渡到 jQuery 1.9——这个向 jQuery 2.0 迈进的关键版本。文章的核心内容是梳理了 1.9 版本中所有破坏性的更改,比如彻底移除了曾被标记为过时的 `.live()`、`.die()` 和 `jQuery.browser()` 方法,同时删除了容易引起混淆的 `.toggle()` 事件绑定方法。对于 `.addBack()` 替换 `.andSelf()`、以及 AJAX 事件监听范围收窄至 `document` 等具体行为变更,也都给出了明确的说明。 文章不仅列出了问题,更关键的是提供了一套实用的升级策略。它重点推荐了官方提供的 jQuery Migrate(迁移)插件作为过渡桥梁。这个插件能在 1.9 环境中恢复大部分被删除的 API,并在开发版本中通过控制台警告精确定位不兼容代码,从而为逐步修改旧代码赢得了缓冲时间。作者强调,虽然迁移插件能解决燃眉之急,但它终究是短期方案,鼓励开发者尽早将代码迁移到更现代、高效的 API 上。 总的来说,这是一份面向前端开发者的实战手册,清晰地指出了“哪里会出问题”以及“如何解决”,对于维护和升级基于 jQuery 的老项目来说,是一份非常直接的参考。

本机暂存
IT 2013-01-18 13:56:28 / 累计浏览 4,680

DOM中nodeName、nodeValue 及 nodeType的说明

这篇技术博客从DOM操作的基础概念切入,系统梳理了nodeName、nodeValue和nodeType三个核心属性的区别与用途。作者归纳了不同节点类型下这些属性的具体表现:比如nodeName在元素节点中是标签名(注意浏览器兼容性可能大小写不一),文本节点则固定为“#text”;nodeValue主要对文本和属性节点有意义,能获取其内容或值,但对文档和元素节点无效;nodeType则用数字直观标识节点类型,其中元素节点为1,文本节点为3,文档节点为9。 文章特别提醒了实际编码中需注意的细节,例如建议对元素节点的nodeName统一使用toUpperCase()转换,以规避不同浏览器返回值大小写不一致的问题。通过表格形式清晰列出了最常用的节点类型及其对应的nodeType数值,方便快速查阅。整体而言,这篇文章将零散的知识点进行了归纳对比,有助于开发者在操作DOM时更准确地定位和处理不同类型的节点。

本机暂存
IT 2013-01-16 14:13:29 / 累计浏览 2,540

Chrome浏览器内部协议Chrome://收集

这篇文章汇总了Chrome浏览器中一系列以“chrome://”开头的内部协议地址,带你探索这个日常工具的“隐藏控制台”。作者从实用角度出发,逐一介绍了书签管理、历史记录、下载管理等基础功能入口,也深入到了网络调试、GPU状态、内存占用监控等专业诊断工具。 特别值得注意的是,文中指出了如chrome://flags这类可能影响浏览器稳定性的实验性选项,并明确建议非必要不要随意改动。同时,对于普通用户可能接触较少的媒体内部数据、应用缓存管理(如AppCache)以及二进制对象(BLOB)存储等概念,文章也给出了简要说明和背景链接。 这些地址构成了一个强大的浏览器自检与调试面板,无论是想快速清理缓存、排查网络故障,还是仅想了解自己的浏览器正在做什么,都能在这里找到入口。文末还附上了查看浏览器及插件版本信息的常用地址chrome://version,是一个非常实用的工具合集。

本机暂存
IT 2013-01-10 22:37:34 / 累计浏览 4,460

jQuery旋转插件—rotate

这篇介绍的是一个实用的 jQuery 图片旋转插件,作者分享了这个小工具的调用方法和兼容性考量。它在不同浏览器下采用了不同的技术方案,在高级浏览器上利用 CSS3 Transform,而在老旧的 IE 6 等版本上则回退到 VML 来实现旋转效果,确保了广泛的兼容性。 插件的核心方法是 `rotate`。你可以直接传入一个角度数值进行旋转,也可以通过参数对象进行更精细的控制,比如设置初始角度,或者将旋转操作绑定到其他事件上(如点击),在事件内部还能方便地继续链式调用。 对于需要在网页中实现图片旋转,同时又必须兼顾各种新旧浏览器的项目来说,这个插件提供了一个现成的、考虑周全的解决方案。它把底层的兼容性细节封装起来,让开发者能用简洁的代码完成旋转交互。

本机暂存