JavaScript从入门到实践(套装全3册)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-29 10:42:24

点击下载

作者:(美)路易斯·阿泰西奥(Luis Atencio) 等

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

JavaScript从入门到实践(套装全3册)

JavaScript从入门到实践(套装全3册)试读:

前言

第三方JavaScript是从一个远程Web服务的地址获得服务,并在发布者页面上独立运行的客户端代码。第三方JavaScript用于创造高度分布式的Web应用程序,例如从社交微件到数据跟踪分析,到功能齐全的嵌入式应用程序。

本书介绍了第三方JavaScript应用程序的开发,不仅告诉读者如何开发运行在第三方环境的JavaScript代码,也介绍了第三方Web开发的相关技术,包括HTML、CSS和HTTP等。本书适用于有第三方代码开发经验的开发者(例如在自己的网站上运行),也适用于希望致力于研究这些问题如何在外部环境运行的开发者们(在其他人的网站上运行)。

本书不是JavaScript编程语言的初级读本,也不介绍HTML和CSS的基本原理。本书介绍的要点包括动态脚本加载、Cookies、HTTPS以及其他中间件和高级Web开发技术。线路图

本书包含如下章节。

第1章介绍了第三方JavaScript的定义。本章告诉读者什么是第三方JavaScript,并介绍了一些现实案例。本章以一个快速的第三方应用程序示例结束,并指出了第三方Web开发的难点。

第2章指导读者如何在一个内容提供者的网站上实际加载和执行他们的代码。描述了如何设置本地开发环境来模拟第三方开发,然后进入脚本加载最佳实践,如何从一个内容提供者的网站中提取配置变量。

第3章重点介绍DOM渲染。指导读者在开发过程中,在不能控制的内容提供商的DOM中呈现最佳实践。本章还包括使用CSS样式和iframe元素避免冲突的策略。

第4章介绍在第三方脚本和数据服务器之间的通信。首先讨论了同源策略,以及由于同源策略限制带来的跨域通信的困难。其次,重点关注在两个工作区进行跨域请求:JSONP和子域名代理。最后,介绍了跨源资源共享(Cross Origin Resource Sharing,CORS),一个新的HTML5浏览器特性,使得在现代浏览器中跨域请求成为可能。

第5章继续介绍跨窗口的消息传递方法,包括在iframe直接的数据传递方法。方法包括window.postMessage——一种HTML5提供的支持在多窗口之间传递消息的特性。其次,介绍了一系列不支持window.postMessage的浏览器。同时,介绍了easyXDM(一个开源JavaScript库),该库提供了与postMessage类似的特性,同时支持现代浏览器和老版本浏览器。

第6章是关于身份验证和Cookies。本章介绍了Cookies在第三方JavaScript中的行为,并提供了当第三方Cookies失效时的解决方案。同时,简要介绍了使用Cookies时需要注意的安全问题。

第7章讨论了第三方应用程序的安全性,涵盖了传统漏洞,包括基于JavaScript的应用程序的跨站点脚本攻击(XSS)、跨站点请求伪造(XSRF)的攻击,也包括特定于第三方应用程序的漏洞。

第8章介绍了JavaScript SDK(Software Development Kit)的发展。开发JavaScript SDK采用了前几章介绍到的技术,并封装成公共的方法。本章还演示了如何为一个基于HTTP的Web服务提供一个客户端JavaScript包装器的API。

第9章关于性能。涵盖的技术包括如何减少文件大小、如何减少应用程序发出的HTTP请求的数量。同时,也介绍了不阻塞浏览器或其他脚本的JavaScript代码的最佳实践。

第10章介绍测试和调试。本章演示了如何使用工具重写代理、如何从生产环境切换到调试应用程序代码的调试环境,并展示了如何为第三方代码编写单元测试。编码规范和下载

所有的源代码清单使用等宽字体显示,以便与其他普通文字区分开来。代码注释中强调了许多重要的信息和概念。在某些情况下,通过项目符号标识特定的代码清单。

本书的配套源代码是在MIT许可下发布的。在出版社网站www.manning.com/Third- PartyJavaScript中提供免费下载。你也可以在GitHub查看源码,地址是http://github.com/thirdpartyjs。在线帮助

购买本书的读者可以免费访问Manning出版社运营的私有Web论坛,在该论坛中你可以发表关于本书的评论,发布技术问题,并能够获得作者以及其他读者的帮助。在该论坛上注册后,用浏览器打开www.manning.com/Third-PartyJavaScript页面。这个页面上有关于如何进入论坛、注册、能够获取哪些帮助以及论坛的规则等内容。

Manning论坛为读者提供了一个有意义的场所,是读者和读者、读者和作者之间对话的桥梁。任何作者的参与、读者的讨论都是自愿的。我们建议你试着问作者一些挑战性的问题以吸引他们的兴趣!

作者在线论坛以及讨论的档案可以从书中提到的出版商网站中获取。封面简介

本书的封面图标题是“联合指挥官”。插图来自法国19世纪版Sylvain Maréchal的第四卷——地区服饰习俗和军事制服。每个插图的刻画都很细致,并且手工着色。丰富多样的Maréchal集合生动地向我们揭示了200年前世界上不同城镇和地区的文化。彼此独立,人们讲不同的方言和语言。在街上或在乡下,仅仅根据一个人的穿着就能够很容易识别出他们生活的地方以及所从事的行业。

着装习俗自此改变了,当时地区的多样性着装风俗也逐渐消失了。现在很难分辨不同洲的居民,更不用说不同的城镇或地区了。或许我们已经由文化的多样性演变到了个人生活的多样性,当然还有更多样,快节奏的科技生活。

在很难区分不同计算机书籍的时代,Manning释放创造力并倡导用两个世纪前丰富多样的地区生活作为计算机图书封面,将人们带回图片中的生活时代。作者简介

Ben Vinegar是Disqus的一名软件工程师,Disqus是一个第三方评论平台,为超过30万的博客、在线出版物以及其他Web网站提供服务,其中包括CNN、连线杂志、每日电讯报和IGN。Ben在加入Disqus之前,在一个非常热门的Web记账应用公司(FreshBooks)担任软件开发团队的主管。

Anton Kovalyov是Mozilla的一名软件工程师,帮助Firefox浏览器编写开发者工具。他还负责JSHint——一个开源的JavaScript代码质量检查工具的开发和维护。在加入Mozilla之前,Anton曾经是Disqus的一名软件工程师,负责内嵌式评论应用的JavaScript开发工作。序一

作为一个第三方JavaScript的开发者,你会有很多的担忧:需要跨多个站点和平台管理并部署代码。像本书中这样深入地介绍如何编写坚实的第三方JavaScript的细节和最佳实践以前也从未有过。这可能是一个复杂的业务,因此请允许我向你介绍关于Douglas Crockford的一个故事来说明潜在的意想不到的后果,Douglas Crockford创造了一个流行很广泛的第三方脚本,以及一个名为OnlineBootyCall的站点。

JSON(JavaScript对象表示法)作为JavaScript的子集,是由Douglas设计的轻量级的数据交换语言,以文字为基础,且易于阅读。早在2005年,他编写了json.js——一个可以将JSON解析为JavaScript对象,反之也可以将JavaScript对象序列化为JSON的小型库。它深受喜爱并立即被大规模采用,但它添加了Object.prototype.toJSONString和String.prototype.parseJSON方法让很多人感到不解。

2007年10月,Douglas推出了json2.js。这并非开发者现在使用的JavaScript版本,而是Douglas自己分享出来的副本。很快,它的托管公司发邮件询问有关OnlineBootyCall.com流量很高的异常情况。Douglas在json2.js代码中包含了一段警告信息:“使用你自己的副本。从一个你不可控的服务器加载代码是很不明智的。”他添加了一个会阻塞浏览器,同步的JavaScript模态alert()提示。结果就使所有从OnlineBootyCall加载资源的页面都会弹出这则消息。

这种情况下,Douglas作为一个第三方脚本的开发者是在保护自己。但更多是因为其他原因导致的。例如,json2.js的出现部分原因是由于Douglas的Object.prototype扩展并不友好。

本书由两名在第三方JavaScript开发领域最专业的开发者编写,书中列出了当下所有的技术来帮你编写第一个初出茅庐的脚本并完成首次部署。我希望本书能够真正帮到你,并且像我一样对下一代网络感到兴奋。PAUL IRISHDEVELOPER RELATIONS:GOOGLE CHROME, JQUERYLEAD DEVELOPER:MODERNIZR AND HTML5 BOILERPLATE序二

2010年2月,我接到Jason Yan的电话面试,Jason Yan是初创公司Disqus的CTO兼共同创始人。当时,Disqus虽然还是一家小公司,但是具有快速增长的评论应用程序,作为一个第三方脚本分发,并受到众多的博客作者和少数大型媒体公司的欢迎。Jason Yan计划专门聘请一位从事快速增长的客户端代码库的JavaScript工程师。

通用JavaScript面试题常常涉及一系列类、主要类型、作用域等。但是,Jason Yan采取了不同的策略。他问我以下(转述)的问题:“假设我使用了内置函数prototype,方法如Array.prototype.indexOf并将其指定为一个新值,你将如何获得其原值呢?”

我被吓懵了。这是我以前从未见过的一个问题,我也不知道答案。杰森跟我解释说他们无法控制Disqus应用程序的执行环境。在这些环境中,Disqus应用程序依靠的内置属性有时会被覆盖或被改写得支离破碎。

我不打算放弃这个问题。所以在中面时,我打开了浏览器的JavaScript控制台,并开始调试函数原型。在短短几分钟,我有了惊人的发现,发现可以使用JavaScript的delete操作符删除被修改的内置属性,浏览器将恢复原始值。

事实上Jason不知道这个解决方案。他亲自采用该方法进行调试,果然有效。我们对于这个新发现都非常兴奋。我们开始讨论Disqus当前解决这一问题的方法,而面试也从严肃的“审讯”变成兴奋讨论,我们讨论了iframes、浏览器hacks和其他脚本性能等。

当时我并不知道,但那是我第一次感受到第三方JavaScript,感受到解决只有运行在别人的Web环境时客户端应用程序才遇到的问题,感受到一些Web开发人员可能永远不会意识到的技术和实践,我完全被迷住了。

随后又经过几轮面试。两个月后,我加入了Disqus团队,当时是在旧金山,只有7名员工。就是在那儿,我认识了Anton Koval-yov,我的JavaScript新同事和未来的合作者。在接下来两年多的时间里,我和Anton Koval-yov负责维护和开发Disqus的客户端代码。Disqus继续快速增长。到2012年,成千上万的网页安装Disqus,每月页面浏览量超过50亿。其客户包括CNN、MLB、IGN、Time.com、滚石,以及几十个其他的主要网络和媒体公司。

安东和我在这段时间,学会了许多有用的第三方脚本编写的技巧、贴士和hack,其中大部分我们已经吸取了教训,其中有一些我们采取保密策略,因为这是我们的技术优势。

在这本书中,凝聚了我们集体的第三方JavaScript知识。我们认为本书不但能帮助无处不在的第三方脚本开发者,而且也认为我们讨论的做法可能让互联网变得更美好。我们希望通过阅读本书,你会同意我们的观点。BEN VINEGAR致谢

我们发现写这本书是一个艰巨、有挑战性的经历,我们也意识到别无他法,只能靠自己。我们想花一点时间感谢那些曾经直接或间接帮助过我们的人。

首先,感谢Daniel Ha、Jason Yan和Disqus团队,不仅雇佣了我们,还制作和维护了一个非常棒的平台,本书中大部分的重要内容均来自于此。其次,感谢Manning给予我们一个讨论的机会,其中许多话题都是小环境的。没有他们,本书将不存在。特别要感谢我们的编辑Renae Gregoire,在整个写作的过程中从头到尾提供帮助。也非常感谢Manning的编辑和制作团队,帮助我们调整文本、改善许多数据和图表等。

我们特别感谢我们的技术评论家Alex Sexton,分享了他在第三方JavaScript方面的宝贵经历;感谢John Ryan III临近出版前还在审查终稿;感谢Paul Irish贡献的前言,并同意我们这些微不足道的业余爱好者使用他的名号。

最后,感谢在不同的阶段阅读我们的手稿的许多评论家和顾问们,慷慨地分享他们的反馈、指出错误、反复确认我们的观点,他们有:Øyvind Sean Kinsey、Kyle Simpson、Henri d’Orgeval、Mike Pennisi、Peter DeHaan、Brian Arnold、Brian Chiasson、Brian Dillard、Brian Forester、David Vedder、Jake McCrary、Jeffrey Yustman、Jonas Bandi、Justin Pope、Margriet Bruggeman、Nikander Bruggeman、Sopan Shewale。

最后,感谢在manning.com论坛评论的每一位读者,在Twitter上@我们的人,以及私下评论本书的人,对于你们提供的每一点帮助,我们都非常感谢。

BEN VINEGAR

我想把这本书献给我的父母,David和Wendy。从我小时候起,他们就开始培养我对计算机的兴趣,如果没有他们,我完成不了这些。特别感谢我的搭档Esther,在这么富有挑战的项目里给我的鼓励和耐心。

ANTON KOVALYOV

我想把这本书献给我的父母(甚至是Ben写的那一部分),是你们在我把大部分的时间都奉献在电脑前时仍不断地支持我。感谢Pamela Fox鼓励我暂停我这边的项目全力致力于本书的编写中去,而不是袖手旁观。第1章第三方JavaScript介绍

本章包括

第三方JavaScript的定义

几个第三方应用实例

实现一个简单的嵌入式微件

了解第三方开发的挑战

第三方JavaScript是一种JavaScript编程模式,可以用来创建高度分布式的Web应用程序。常规的Web应用需要通过一个特定的Web地址访问,而第三方JavaScript创建的应用,只需要引入一些简单的JavaScript脚本就可以加载到任意页面上。

你之前也许就曾遇到过第三方JavaScript。例如广告脚本,它可以在发布者网站上生成、定向投放广告。用户也许并不喜欢广告脚本,但是它却能帮助网站发布者获得收入并维持网站的运转。成千上万的网站上都能看到广告的身影。事实上,几乎所有的广告都是从单独的广告服务器加载的第三方脚本。

开发者通过第三方JavaScript可以解决许多问题,广告脚本仅是其中的一个使用场景。一些开发者用它们来创建独立的产品以满足网站发布者的需要。例如,位于旧金山的一个初创公司(Disqus)所开发的第三方评论应用,为Web发布者提供即时评论系统。本书的作者也是该公司的员工。还有一些开发者通过开发第三方JavaScript来扩展传统Web应用,从而获得其他网站的用户。例如,Facebook和Twitter开发了数十个社交微件展示在发布者的网站上。这些微件能够帮助社交网站在它们应用的正常系统之外扩展用户的规模。

小公司也可以受益于第三方JavaScript。比方说,你是一家B2B(business to business)Web应用的所有者,需要通过Web表单收集客户的信息。可能有一些潜在用户想使用你的应用,但是他们会犹豫,因为这样会把自己的用户重定向到一个外部的网站。通过第三方JavaScript,就可以让你的客户直接在他们自己的Web页面上加载你的应用,从而解决他们所顾虑的重定向问题。

第三方JavaScript并非表面看起来那么光鲜。写这些应用并非易事。在公开发布第三方JavaScript代码之前你需要克服很多困难。值得庆幸的是,本书会完整介绍第三方应用的开发过程,足以让你明白如何解决这些问题。

但是,当我们深入了解第三方JavaScript之前,需要先了解一些基础知识。为了便于理解,本章首先为第三方JavaScript下一个定义,其次了解一些公司在现实世界中的实现方法,再看一个简单的第三方应用实现的示例,最后谈论关于第三方应用开发面临的诸多挑战。

让我们开始更好地了解第三方JavaScript是什么,并且能够用它来做什么吧!1.1 第三方JavaScript的定义

在一个典型的软件交换过程中,有两类重要的参与者:第一类是操作软件的使用者,第二类是软件的提供者或者作者。

在网络上,你可能认为操作浏览器的用户是第一部分。当他们访问一个Web页面时,浏览器会向内容提供者发起相应的请求。内容提供者为第二部分,它从对应的服务器向用户的浏览器回传Web页面所需的HTML、图片、样式表和脚本文件。

针对这样特别简单的Web传输过程,可能只有两个参与者。但是,如今大部分网站都提供着包含其他来源的内容,或者说是第三方的内容。如图1.1所示,第三方可能提供任何内容,从文章内容到头像存储,再到内嵌视频。从严格意义上讲,任何除了网站提供者之外的组织向客户端提供的内容都被认为是第三方的。图1.1 如今的网站大量使用第三方服务

如果把“第三方服务”单纯归类为提供JavaScript代码,那么这个定义会很混乱。对于第三方JavaScript究竟如何构成,许多开发者执不同的意见。一些开发者将它归类为不仅仅为作者提供服务的JavaScript代码。这将会包括众多流行的JS库,如jQuery和Backbone.js。甚至从Stack Overflow这样的网站粘贴的解决方案也被包括在内,任何不是网站作者自己编写的代码都会被归类在这种定义之下。

其他开发者倾向于把从第三方服务器加载的代码认为是第三方JavaScript,即并不在内容提供者控制范围内的代码。原因在于,内容提供者管理的代码是在他们控制范围内的:内容提供者可以选择加载代码的时机,有权限对代码进行修改,最终他们对代码的行为负责。这与单独加载来自于第三方服务器的代码不同,第三方代码不能被内容提供者修改,而且可能随时发生改变,并不通知给使用者。下面,通过一个内容提供者HTML页面的示例,展示如何从本地和外部服务器加载JavaScript文件。

程序清单1.1 Web页面从本地和外部加载脚本的示例

两种定义没有对与错之分,你可以对其中任意一种定义的解释提出质疑。但是,基于本书的目的,我们对后者的定义更感兴趣。当我们提及第三方JavaScript时,我们即认为代码是如下状态。

并非由内容提供者所编写。

从外部服务器获取且在内容提供者控制外围之外。

编写代码的意图是作为内容提供者网站的一部分被执行。

那么TYPE="TEXT/JAVASCRIPT"去哪里了呢?你可能已经注意到了在这个例子中

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载