小游戏

今天有意思,玩上了与浏览器相关的小游戏。先附上链接http://game.cyqdata.com/

先是第一关:

一上来就是空白页连个链接都没有,唯点击开始有一个提示框。打开控制台发现超链接的onclick()并没有实现跳转功能

所以只需要将a标签修改为onclik="gotoUrl()"

第二关

:

答案但是毫无疑问是2,再聪明点可能是3,那么问题来了哪里去输入2?再次打开控制台。发现有一个隐藏input。

此时发现有个奇奇怪怪的value="5LqM6L+b5Yi2Lmh0bWw="。幸亏之前有学到这个编码方式,Base64编码。通过Base64在线编码器解码得到二进制.html;好的第二个页面出来了。

????什么东西????按道理不应该是这样的。冷静想想,二进制指的会不会是要2的二进制10,于是尝试了10.html

??非法?难不成我没有办理护照?想了很久,非法入境,设置了权限?然后找了很久的答案。并没有结果,如果服务器端设置了权限,那么我就根本无法继续下去,于是换了一个角度思考,会不会缺少了参数。于是我在控制台不停的刷新数据,都是一篇空白。然后查看了很久响应内容,都是一堆乱码,然而并没有关系,重要的是我发现了进入这个页面需要一个参数"?t=1"。所以在路径中需要有加上这一字符串就好了。

第三关:

so easy?不要被骗了。打开控制台看到一下内容

这是什么???于是纠结开始了。这特么是什么鬼?难道我要去解释这些编码?

于是开始了我的解码之旅。在dom选项窗口中发现了对我编码似乎很有用的东西。

于是我在想,会不会是一串$符号对应一个字符?然后我就去解释这些$符号,发现这个不可行,这串编码本身就是为了不给其他人看出来而设置的编码,我单独去解释也不一定解释的出来,当然不是不可以,只是需要花点时间。陷入沉思。最后在表哥的帮助下,提示,浏览器本身有许多可以存放消息的地方,要去了解浏览器的机制,是如何接受消息,如何存放文件的,于是灵光以上,在浏览器中存放数据机制中,最常见的就是cookie,果不其然就是存在这里。同样的base64解码就可以获得一个界面了。

总结一下,那么作为一个走向前端的编程人员,浏览器是必须要熟悉了解的工具,因为我们所做的一起页面都必须在浏览器中显示。

浏览器缓存说明

一、http缓存

http缓存是基于HTTP协议的浏览器文件级缓存机制。即针对文件的重复请求情况下,浏览器可以根据协议头判断从服务器端请求文件还是从本地读取文件,chrome控制台下的Frames即展示的是浏览器的http文件级缓存。以下是浏览器缓存的整个机制流程。主要是针对重复的http请求,在有缓存的情况下判断过程主要分3步:

◆判断expires,如果未过期,直接读取http缓存文件,不发http请求,否则进入下一步。

◆判断是否含有etag,有则带上if-none-match发送请求,未修改返回304,修改返回200,否则进入下一步。

◆判断是否含有last-modified,有则带上if-modified-since发送请求,无效返回200,有效返回304,否则直接向服务器请求。

如果通过etag和last-modified判断,即使返回304有至少有一次http请求,只不过返回的是304的返回内容,而不是文件内容。所以合理设计实现expires参数可以减少较多的浏览器请求。

二、websql

websql这种方式只有较新的chrome浏览器支持,并以一个独立规范形式出现,主要有以下特点:

◆Web Sql 数据库API 实际上不是HTML5规范的组成部分;

◆在HTML5之前就已经存在了,是单独的规范;

◆它是将数据以数据库的形式存储在客户端,根据需求去读取;

◆跟Storage的区别是: Storage和Cookie都是以键值对的形式存在的;

◆Web Sql 更方便于检索,允许sql语句查询;

◆让浏览器实现小型数据库存储功能;

◆这个数据库是集成在浏览器里面的,目前主流浏览器基本都已支持;

websql API主要包含三个核心方法:

◆openDatabase : 这个方法使用现有数据库或创建新数据库创建数据库对象。

◆transaction : 这个方法允许我们根据情况控制事务提交或回滚。

◆executeSql : 这个方法用于执行真实的SQL查询。

openDatabase方法可以打开已经存在的数据库,不存在则创建:

var db = openDatabase('mydatabase', '2.0', my db',2*1024);

openDatabasek中五个参数分别为:数据库名、版本号、描述、数据库大小、创建回调。创建回调没有也可以创建数据库。

database.transaction() 函数用来查询,executeSql()用于执行sql语句。

三、indexDB

IndexedDB 是一个为了能够在客户端存储可观数量的结构化数据,并且在这些数据上使用索引进行高性能检索的 API。虽然 DOM 存储,对于存储少量数据是非常有用的,但是它对大量结构化数据的存储就显得力不从心了。IndexedDB 则提供了这样的一个解决方案。

IndexedDB 分别为同步和异步访问提供了单独的 API 。同步 API 本来是要用于仅供 Web Workers 内部使用,但是还没有被任何浏览器所实现。异步 API 在 Web Workers 内部和外部都可以使用,另外浏览器可能对indexDB有50M大小的限制,一般用户保存大量用户数据并要求数据之间有搜索需要的场景。

异步API

异步 API 方法调用完后会立即返回,而不会阻塞调用线程。要异步访问数据库,要调用 window 对象 indexedDB 属性的 open() 方法。该方法返回一个 IDBRequest 对象 (IDBOpenDBRequest);异步操作通过在 IDBRequest 对象上触发事件来和调用程序进行通信。

◆IDBFactory 提供了对数据库的访问。这是由全局对象 indexedDB 实现的接口,因而也是该 API 的入口。

◆IDBCursor 遍历对象存储空间和索引。

◆IDBCursorWithValue 遍历对象存储空间和索引并返回游标的当前值。

◆IDBDatabase 表示到数据库的连接。只能通过这个连接来拿到一个数据库事务。

◆IDBEnvironment 提供了到客户端数据库的访问。它由 window 对象实现。

◆IDBIndex 提供了到索引元数据的访问。

◆IDBKeyRange 定义键的范围。

◆IDBObjectStore 表示一个对象存储空间。

◆IDBOpenDBRequest 表示一个打开数据库的请求。

◆IDBRequest 提供了到数据库异步请求结果和数据库的访问。这也是在你调用一个异步方法时所得到的。

◆IDBTransaction 表示一个事务。你在数据库上创建一个事务,指定它的范围(例如你希望访问哪一个对象存储空间),并确定你希望的访问类型(只读或写入)。

◆IDBVersionChangeEvent 表明数据库的版本号已经改变。

同步API

规范里面还定义了 API 的同步版本。同步 API 还没有在任何浏览器中得以实现。它原本是要和webWork 一起使用的。

四、cookie

Cookie(或者Cookies),指一般网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。cookie一般通过http请求中在头部一起发送到服务器端。一条cookie记录主要由键、值、域、过期时间、大小组成,一般用户保存用户的认证信息。cookie最大长度和域名个数由不同浏览器决定,具体如下:

浏览器 支持域名个数 最大长度 IE7以上 50个 4095B Firefox 50个 4097B Opera 30个 4096B Safari/WebKit 无限制 4097B

不同域名之间的cookie信息是独立的,如果需要设置共享可以在服务器端设置cookie的path和domain来实现共享。浏览器端也可以通过document.cookie来获取cookie,并通过js浏览器端也可以方便地读取/设置cookie的值。

五、localstorage

localStorage是html5的一种新的本地缓存方案,目前用的比较多,一般用来存储ajax返回的数据,加快下次页面打开时的渲染速度。

浏览器 最大长度 IE9以上 5M Firefox 8以上 5.24M Opera 2M Safari/WebKit 2.6M //localStorage核心API: localStorage.setItem(key, value)    //设置记录 localStorage.getItem(key)           //获取记录 localStorage.removeItem(key)        //删除该域名下单条记录 localStorage.clear()                //删除该域名下所有记录

值得注意的是,localstorage大小有限制,不适合存放过多的数据,如果数据存放超过最大限制会报错,并移除最先保存的数据。

https://github.com/machao/localStorage

六、sessionstorage

sessionStorage和localstorage类似,但是浏览器关闭则会全部删除,api和localstorage相同,实际项目中使用较少。

七、application cache

application cahce是将大部分图片资源、js、css等静态资源放在manifest文件配置中。当页面打开时通过manifest文件来读取本地文件或是请求服务器文件。

离线访问对基于网络的应用而言越来越重要。虽然所有浏览器都有缓存机制,但它们并不可靠,也不一定总能起到预期的作用。HTML5 使用ApplicationCache 接口可以解决由离线带来的部分难题。前提是你需要访问的web页面至少被在线访问过一次。

使用缓存接口可为您的应用带来以下三个优势:

◆离线浏览 – 用户可在离线时浏览您的完整网站。

◆速度 – 缓存资源为本地资源,因此加载速度较快。

◆服务器负载更少 – 浏览器只会从发生了更改的服务器下载资源。

八、cacheStorage

CacheStorage是在ServiceWorker的规范中定义的。CacheStorage 可以保存每个serverWorker申明的cache对象,cacheStorage有open、match、has、delete、keys五个核心方法,可以对cache对象的不同匹配进行不同的响应。

cacheStorage.has()

如果包含cache对象,则返回一个promise对象。

cacheStorage.open()

打开一个cache对象,则返回一个promise对象。

cacheStorage.delete()

删除cache对象,成功则返回一个promise对象,否则返回false。

cacheStorage.keys()

含有keys中字符串的任意一个,则返回一个promise对象。

cacheStorage.delete()

匹配key中含有该字符串的cache对象,返回一个promise对象。

九、flash缓存

这种方式基本不用,这一方法主要基于flash有读写浏览器端本地目录的功能,同时也可以向js提供调用的api,则页面可以通过js调用flash去读写特定的磁盘目录,达到本地数据缓存的目的。

前端答题小游戏_前端知识小游戏相关推荐

  1. 蓝盾小火墙补丁_网络安全知识小科普

    网络安全知识小科普 网络安全知识小科普 1.上网前可以做那些事情来确保上网安全? 首先,你需要安装个人防火墙,利用隐私控制特性,你可以选择哪些信息需要保密,而不会不慎把这些信息发送到不安全的网站.这样 ...

  2. 实战小项目_猜数字小游戏

    猜数字游戏 基本功能: 在1-100中间随机生成一个整型数字,选手进行猜测,直到猜中为止,选手每猜错一次从总成绩中扣除3分,初始成绩为100,最低成绩为0: 随机数字生成: 利用函数 rand() , ...

  3. 前端改变div排序_前端面试经常问到的问题

    CSS 1.盒模型 2.flex 3.css单位 4.css选择器 5.bfc 清除浮动 6.层叠上下文 7.常见页面布局 8.响应式布局 9.css预处理,后处理 10.css3新特性 animat ...

  4. 微信群打卡小程序_用微信小程序“小打卡”,打造免费的阅读平台!

    小归 一直和微信小程序--"小打卡"的创始人保持着微信通讯,也写了<快捷|以"小打卡"为例带你玩转微信小程序!>,这篇文章主要是真对如何打卡来写的, ...

  5. 前端背景图放置_前端开发关于网页背景图片的缩放自适应及组合形成背景图的问题...

    前端游戏开发贴吧 游戏前端开发 游戏开发流程 策划美术前端后端 昨天在切图时遇到如下两个问题: 1.需要背景图片无论浏览器大小如何缩放,背景图片始终宽度百分百显示. 2.需要将给出的一张背景图片和一张 ...

  6. java前端接口怎么写_前端接口怎么写

    1.java后台怎么写接口给前端使用 java后台如何给前端写使用接口,框架一开始就得考虑好的,很多都使用mvc架构往往用户登录时,用户密码符合,会允许其访问,保存登录信息,下次就不需要再次登录了,直 ...

  7. wxml 判断 小程序_如何判断小程序外包公司是否靠谱

    微信小程序依附微信App,由于其无需下载,无需安装,无需注册,直接用微信授权登录,不占内存等优势在短短2年多的时间斩获超过10亿用户.又因为微信官方开通了小程序附近五公里展示以及在微信搜一搜增加&qu ...

  8. python 自动化微信小程序_干货 | 微信小程序自动化测试最佳实践(附 Python 源码)...

    原标题:干货 | 微信小程序自动化测试最佳实践(附 Python 源码) 本文为霍格沃兹测试学院测试大咖公开课<微信小程序自动化测试>图文整理精华版. 随着微信小程序的功能和生态日益完善, ...

  9. 专属海报小程序_轻松生成小程序分享海报

    小程序海报组件 需求 小程序分享到朋友圈只能使用小程序码海报来实现,生成小程序码的方式有两种,一种是使用后端方式,一种是使用小程序自带的canvas生成:后端的方式开发难度大,由于生成图片耗用内存比较 ...

  10. 生日祝福小程序_热点丨小团团生日会享受史诗级牌面:DY官博更改头像送祝福!万达、西湖地贴屏显画面满满!...

    作为现如今斗鱼人气最高的一位女主播,小团团虽然很少露脸直播,但她凭借着有趣的灵魂赢得众多水友的喜欢.在过去的一年当中,小团团的成长有目共睹,而就在昨天,她也是在直播中迎来了一个重要的日子---生日.本 ...

最新文章

  1. 十分钟了解分布式计算:GraphX
  2. python怎么做乘法表_python怎么写乘法表
  3. 3D游戏开发套件指南(入门篇)
  4. Java IO基准测试:Quasar与异步ForkJoinPool与ManagedBlock
  5. P2P原理及UDP穿透简单说明
  6. 西门子触摸屏修改ip地址_基于博途V15 西门子S7-1200与触摸屏一个简单的例子
  7. 算法基础——冒泡与选择排序
  8. AD16查看不同层并修改走线(一般也就两层
  9. win7发现不了无线网络_Win7笔记本怎么设置wifi热点 Win7笔记本设置wifi热点方法【详解】...
  10. 前端H5面试题Js:JavaScript字符串的常用方法有哪些?
  11. silvaco AMS安装方法
  12. steam pipeGUI
  13. do-while循环1加到100
  14. 04-Kubernetes 创建资源
  15. 执行transact mysql_错误 执行Transact-SQL语句批处理时发生了异常。无法设置主体'sa'的凭据...
  16. 腾讯视频会议真实内部实现分享
  17. 详述break、return、continue的区别
  18. VirtualBox快捷键
  19. (十九)深入理解蓝牙BLE之“低功耗蓝牙dongle”
  20. 近几年比较火的团队协作、项目管理工具测评及工具选择原则介绍

热门文章

  1. 大一新生计算机课word知识,大一计算机结业论文
  2. HDFS Rack Awareness详解
  3. 解决了这7个问题,我的产出效率提升了100%
  4. 【ZZULIOJ】1092: 素数表(函数专题)
  5. 互联网大数据时代下亚马逊是如何解决数据存储的
  6. My Eighty-third Page - 打家劫舍Ⅲ - By Nicolas
  7. 截止到2011年,在五大学科国际奥赛获得金牌最多的中学们
  8. java纸牌_Java纸牌拖拉机简单模拟
  9. 自定义View之仿虾米音乐TabLayout
  10. 深入WEP密码破解原理