跨域访问和防盗链基本原理,10分钟学会前端调节

时间:2019-10-04 09:45来源:美高梅游戏网站
优化 canvas 部分 对于 touchmove 函数,原理都是一致的,手指一划,就施行了 n多次,那么些标题背后在缓慢解决,先来看另一个主题素材。 touchmove是贰个每每函数,看见此间,倘让你并

优化 canvas 部分

对于 touchmove 函数,原理都是一致的,手指一划,就施行了 n 多次,那么些标题背后在缓慢解决,先来看另一个主题素材。

touchmove 是贰个每每函数,看见此间,倘让你并不曾留意看自身的代码,这你对我使用的 canvas 画图方式大概不太精通,上边这几个是 touchmove 函数干了何等事:

  1. 先判定,如果当前地处未入选二个密码状态,则三番两次监视当前的岗位,直到选中第一个密码,步入第二步;
  2. 踏向 update 函数,update 函数根本干四件事,重绘圆(密码)、决断当前地点、重绘点、重绘线;

第二步是二个很担忧的动作,为啥历次都要重绘圆,点和线呢?

图片 1

上面那几个图能够很好的求证难点,因为在安装或表明密码的进度中,大家需求用一条线来再三再四触点到当前的结尾叁个密码,何况当 touchmove 的时候,能见到它们在退换。那些效应很棒,能够描绘出 touchmove 的轨道。

但是,那就非得要时时刷新 canvas,质量大大地收缩,刷新的那但是全部canvas。

因为 canvas 独有四个,既要画背景圆(密码),又要画已选密码的点,和折线。这么些中大多手续,自始自终只须要三次就好了,比方背景圆,只需在开发银行的时候画贰遍,已选密码,只要当 touchCircles 新美元素的时候才会用三次,还不用重绘,只要画就足以了。折线分成两部分,一部分是已选密码之间的连线,还有就是最后三个密码点到当下触点之间的连线。

假使有四个 canvas 就好了,三个储存静态的,三个特地用来重绘

干什么不得以有吧!

本身的消除思路是,今后有八个canvas,贰个在底层,作为描绘静态的圆、点和折线,另叁个在上层,一方面监听 touchmove 事件,另一方面不停地重绘最后一个密码点的圆心到近年来触点之间的线。假使如此能够的话,touchmove 函数实践三遍的频率大大提升。

插入第二个 canvas:

var canvas2 = canvas.cloneNode(canvas, true); canvas2.style.position = 'absolute';//让上层 canvas 覆盖底层 canvas canvas2.style.top = '0'; canvas2.style.left = '0'; this.el.appendChild(canvas2); this.ctx2 = canvas2.getContext('2d');

1
2
3
4
5
6
var canvas2 = canvas.cloneNode(canvas, true);
canvas2.style.position = 'absolute';//让上层 canvas 覆盖底层 canvas
canvas2.style.top = '0';
canvas2.style.left = '0';
this.el.appendChild(canvas2);
this.ctx2 = canvas2.getContext('2d');

要转变对首个 ctx2 进行 touch 监听,并安装一个 this.reDraw 参数,表示有新的密码增加进去,供给对点和折线增加新内容, update 函数要改成这么:

update: function(p){ // 更新 touchmove this.judgePos(p); // 每一趟都要一口咬定this.drawLine2TouchPos(p); // 新加函数,用于绘最终二个密码点点圆心到触点之间的线 if(this.reDraw){ // 有新的密码加跻身 this.reDraw = false; this.drawPoints(); // 加多新点 this.drawLine();// 增多新线 } },

1
2
3
4
5
6
7
8
9
update: function(p){ // 更新 touchmove
  this.judgePos(p); // 每次都要判断
  this.drawLine2TouchPos(p); // 新加函数,用于绘最后一个密码点点圆心到触点之间的线
  if(this.reDraw){ // 有新的密码加进来
    this.reDraw = false;
    this.drawPoints(); // 添加新点
    this.drawLine();// 添加新线
  }
},

drawLine2TouchPos: function(p){ var len = this.touchCircles.length; if(len >= 1){ this.ctx2.clearRect(0, 0, this.width, this.width); // 先清空 this.ctx2.beginPath(); this.ctx2.lineWidth = 3; this.ctx2.moveTo(this.touchCircles[len - 1].x, this.touchCircles[len

  • 1].y); this.ctx2.lineTo(p.x, p.y); this.ctx2.stroke(); this.ctx2.closePath(); } },
1
2
3
4
5
6
7
8
9
10
11
12
drawLine2TouchPos: function(p){
  var len = this.touchCircles.length;
  if(len >= 1){
    this.ctx2.clearRect(0, 0, this.width, this.width); // 先清空
    this.ctx2.beginPath();
    this.ctx2.lineWidth = 3;
    this.ctx2.moveTo(this.touchCircles[len - 1].x, this.touchCircles[len - 1].y);
    this.ctx2.lineTo(p.x, p.y);
    this.ctx2.stroke();
    this.ctx2.closePath();
  }
},

对应的 drawPoints 和 drawLine 函数也要对应修改,由原理画全体的,到方今只必要画新加的。

效果如何:

图片 2

move 函数实践数次,而其他函数独有当新密码加进来的时候才实行三遍。

六、WebSocketd

上边,笔者要引入一款极度极其的 WebSocket 服务器:Websocketd。

它的最大特征,正是后台脚本不限语言,标准输入(stdin)便是 WebSocket 的输入,规范输出(stdout)就是 WebSocket 的出口。

图片 3

举个例子来讲来讲,下边是一个 Bash 脚本counter.sh

#!/bin/bash echo 1 sleep 1 echo 2 sleep 1 echo 3

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
 
echo 1
sleep 1
 
echo 2
sleep 1
 
echo 3
 

指令行下运行那个本子,会输出1、2、3,每一个值时期间隔1秒。

$ bash ./counter.sh 1 2 3

1
2
3
4
5
$ bash ./counter.sh
1
2
3
 

现在,启动websocketd,内定那些本子作为劳动。

$ websocketd --port=8080 bash ./counter.sh

1
2
$ websocketd --port=8080 bash ./counter.sh
 

地点的吩咐会运行一个 WebSocket 服务器,端口是8080。每当顾客端连接那个服务器,就能够施行counter.sh剧本,并将它的出口推送给客户端。

var ws = new WebSocket('ws://localhost:8080/'); ws.onmessage = function(event) { console.log(event.data); };

1
2
3
4
5
6
var ws = new WebSocket('ws://localhost:8080/');
 
ws.onmessage = function(event) {
  console.log(event.data);
};
 

地点是客商端的 JavaScript 代码,运维之后会在调控台依次输出1、2、3。

有了它,就足以很方便地将命令行的输出,发给浏览器。

$ websocketd --port=8080 ls

1
2
$ websocketd --port=8080 ls
 

上边包车型地铁命令会施行ls命令,进而将当前目录的剧情,发给浏览器。使用这种格局实时监督服务器,几乎是一见钟情(代码)。

图片 4

越来越多的用法能够参照他事他说加以考察官方示例。

  • Bash 脚本读取客商端输入的例子
  • 五行代码实现二个最简便易行的闲谈服务器

图片 5

websocketd 的庐山真面目,正是命令行的 WebSocket 代理。只要命令行能够进行的主次,都足以透过它与浏览器实行 WebSocket 通信。下边是二个 Node 实现的回音服务greeter.js

跨域访问和防盗链基本原理,10分钟学会前端调节和测验利器。process.stdin.setEncoding('utf8'); process.stdin.on('readable', function() { var chunk = process.stdin.read(); if (chunk !== null) { process.stdout.write('data: ' + chunk); } });

1
2
3
4
5
6
7
8
9
process.stdin.setEncoding('utf8');
 
process.stdin.on('readable', function() {
  var chunk = process.stdin.read();
  if (chunk !== null) {
    process.stdout.write('data: ' + chunk);
  }
});
 

运营这一个本子的授命如下。

$ websocketd --port=8080 node ./greeter.js

1
2
$ websocketd --port=8080 node ./greeter.js
 

法定饭店还会有别的各个语言的例子。

主面板

安装完毕今后,在Firefox浏览器的地址后方就能够有三个小虫子的Logo图片 6。单击该图标后就能够实行Firebug的调控台,也足以由此快速键<F12>来开发调节台。使用Ctrl+F12快捷键能够使Firebug独立展开一个窗口而不占用Firefox页面尾部的空间。

图片 7

从上海体育场所中得以看到,Firebug包蕴7个面板:

操纵台面板:用于记录日志、概览、错误提示和实行命令行,同期也用于Ajax的调治;

HTML面板:用于查看HTML成分,能够实时地编辑HTML和转移CSS样式,它总结3个子面板,分别是样式、布局和DOM面板;

CSS面板:用于查看全部页面上的CSS文件,能够动态地修改CSS样式,由于HTML面板中曾经富含了八个CSS面板,由此该面板将少之甚少用到;

剧本面板:用于展现Javascript文件及其所在的页面,也得以用来显示Javascript的Debug调节和测量检验,包罗3个子面板,分别是监督、商旅和断点;

DOM面板:用于展示页面上的有着指标;

互连网面板:用于监视网络移动,能够协理查看三个页面包车型地铁载入景况,包罗文件下载所攻下的日子和文书下载出错等新闻,也足以用来监视Ajax行为;

Cookies面板:用于查看和调解cookie(必要安装下文能源中所提到的Firecookie)。


 

2、CORS(Cross-origin resource sharing)跨域访谈

上述的JSONP由于有无数范围,已经江郎才掩满足各样灵活的跨域访问诉求。以往浏览器支持一种新的跨域访谈机制,基于服务端调控访问权限的法子。简单的说,浏览器不再一味防止跨域访问,而是必要检讨指标站点再次来到的新闻的头域,要检查该响应是不是同意当前站点访谈。通过HTTP头域的措施来打招呼浏览器:

JavaScript

Response headers[edit] Access-Control-Allow-Origin Access-Control-Allow-Credentials Access-Control-Expose-Headers Access-Control-Max-Age Access-Control-Allow-Methods Access-Control-Allow-Headers

1
2
3
4
5
6
7
Response headers[edit]
Access-Control-Allow-Origin
Access-Control-Allow-Credentials
Access-Control-Expose-Headers
Access-Control-Max-Age
Access-Control-Allow-Methods
Access-Control-Allow-Headers

服务端利用那多少个HTTP头域文告浏览器该能源的拜访权限新闻。在做客能源前,浏览器会头阵出OPTIONS央求,获取这个权限音讯,并比对当前站点的台本是还是不是有权力,然后再将实际的脚本的数额要求发出。开采权限不容许,则不会发出诉求。逻辑流程图为:

图片 8

浏览器也能够一向将GET央浼发出,数据和权杖同有时候到达浏览器端,不过多少是还是不是交付脚本管理必要浏览器检查权限比较后作出决定。

三回具体的跨域访谈的流水生产线为:

图片 9

于是权限决定交给了服务端,服务端经常也会提供对财富的COHavalS的安排。

跨域访谈还可能有其余三种艺术:本站服务端代理、跨子域时利用修改域标记等办法,可是利用场景的范围越多。近日非常多的跨域访谈都由JSONP和CO奥迪Q5S这两类情势结合。

1 赞 1 收藏 评论

图片 10

深深体系

JavaScript深切类别目录地址:。

JavaScript深远连串估算写十五篇左右,目的在于帮大家捋顺JavaScript底层知识,器重解说如原型、作用域、推行上下文、变量对象、this、闭包、按值传递、call、apply、bind、new、承接等难点概念。

一旦有荒唐或然不谨严的地方,请必需给予指正,十一分谢谢。如果喜欢照旧具备启发,接待star,对作者也是一种鞭挞。

  1. JavaScirpt 深刻之从原型到原型链
  2. JavaScript 深远之词法作用域和动态功用域
  3. JavaScript 浓厚之实行上下文栈
  4. JavaScript 深刻之变量对象
  5. JavaScript 深切之效能域链
  6. JavaScript 深刻之从 ECMAScript 标准解读 this
  7. JavaScript 深刻之实施上下文
  8. JavaScript 深刻之闭包
  9. JavaScript 深刻之参数按值传递
  10. JavaScript 深远之call和apply的模拟实现
  11. JavaScript 深刻之bind的模拟实现
  12. JavaScript 深入之new的模拟完结

    1 赞 2 收藏 评论

图片 11

参考

H5lock
Canvas教程
js获取单选框里面包车型大巴值
前面叁个高质量滚动 scroll 及页面渲染优化

3 赞 5 收藏 评论

图片 12

三、顾客端的简短示例

WebSocket 的用法非常轻松。

上面是四个网页脚本的例证(点击这里看运维结果),基本上一眼就会精晓。

var ws = new WebSocket("wss://echo.websocket.org"); ws.onopen = function(evt) { console.log("Connection open ..."); ws.send("Hello WebSockets!"); }; ws.onmessage = function(evt) { console.log( "Received Message: " + evt.data); ws.close(); }; ws.onclose = function(evt) { console.log("Connection closed."); };

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var ws = new WebSocket("wss://echo.websocket.org");
 
ws.onopen = function(evt) {
  console.log("Connection open ...");
  ws.send("Hello WebSockets!");
};
 
ws.onmessage = function(evt) {
  console.log( "Received Message: " + evt.data);
  ws.close();
};
 
ws.onclose = function(evt) {
  console.log("Connection closed.");
};      
 

  脚本面板

本子面板不只好查阅页面内的脚本,何况还应该有壮大的调节和测验成效。

在剧本面板的左侧有“监察和控制”、“仓库”和“断点”四个面板,利用Firebug提供的安装断掉的法力,能够很有益地调节和测验程序,如下图所示:

图片 13

1.静态断点

诸如test.html文件,代码如下:

XHTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "; <html xmlns="; <head> <script type="text/javascript"> function doSomething(){ var lab = document.getElementById('messageLabel'); arrs=[1,2,3,4,5,6,7,8,9]; for(var arr in arrs){ lab.innerHTML+=arr+"<br />" } } </script> </head> <body> <div> <div id="messageLabel"></div> <input type="button" value="Click Here" onClick="doSomething();"/> </div> </body> </html>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <script type="text/javascript">
        function doSomething(){
            var lab = document.getElementById('messageLabel');
            arrs=[1,2,3,4,5,6,7,8,9];
            for(var arr in arrs){
                lab.innerHTML+=arr+"<br />"
            }
        }
    </script>
</head>
<body>
    <div>
        <div id="messageLabel"></div>
        <input type="button" value="Click Here" onClick="doSomething();"/>
    </div>
</body>
</html>

运作代码后能够见见下图所示效果。图中加粗并有颜色的行号表示此处为JavaScript代码,能够在这里安装断点。例如在第6行那句代码前边单击一下,那它前边就汇合世二个灰色的圆点,表示此处已经被设置了断点。此时,在右侧断点面板的断点列表中就涌出了刚刚设置的断点。假若想不时禁止使用有些断点,能够在断点列表中去掉有个别断点的前边的复选框中的勾,那么此时左臂面板中相应的断点就从红浅黄形成了红黑灰色了。

图片 14

设置完断点之后,我们就能够调节和测量检验程序了。单击页面中的“Click Here”按键,能够看出剧本甘休在用谈玫瑰深翠绿底色标出的那一行上。此时用鼠标移动到有个别变量上就能够呈现此时那么些变量的value。呈现效果如下:

图片 15

此时JavaScript内容上方的图片 16五个按键已经变得可用了。它们各自代表“继续实行”、“单步走入”、“单步跳过”和“单步退出”。

继续实行<F8>:当通过断点来终止施行脚本时,单击<F8>就能够东山复起施行脚本。

单步进入<F11>:允许跳到页面中的其余函数内部。

单步跳过<F10>:单击<F10>来平素跳过函数的调用即跳到return之后。

单步退出<shift+F11>:允许复苏脚本的实行,直到下三个断点截止。

单击“单步步向”按键,代码会跳到下一行,展现效果如下:

图片 17

图片 18

从上海教室能够看来,当鼠标移动到“lab”变量上时,就可以展现出它的剧情是三个DOM元素,即“div#messageLabel”。

此时将右左边板切换成“监察和控制”面板,这里列出了多少个变量,包含“this”指针的指向以及“lab”变量。单击“+”能够见见详细的音讯。显示如下:

图片 19

2.规范断点

在“lab.innerHTML+=arr+”<br />””那行代码前边的序号上单击鼠标右键,就能够出现设置条件断点的输入框。在该框内输入“arr==5”,然后回车确认,显示效果如下:

图片 20

末段单击页面包车型客车“Click Here”按键。能够窥见,脚本在“arr==5”那些表达式为真时停下了,由此“5”以及后来的数字尚未呈现到页面中。下图分别是健康职能和装置了尺度断点之后的展现效果相比:

图片 21图片 22

二、跨域访谈基本原理

在上一篇,介绍了盗链的基本原理和防盗链的缓和方案。这里更彻底深入分析一下跨域访谈。先看看跨域访谈的相关原理:跨网址指令码。维基上边给出了跨站访谈的风险性。从此间能够整理出跨站访谈的概念:JS脚本在浏览器端发起的呼吁其余域(名)下的网址数量的HTTP需要。

这里要与referer区分开,referer是浏览器的行事,全数浏览器发出的乞请都不会设有安全危害。而由网页加载的脚本发起呼吁则会不可控,乃至足以收缴客户数量传输到其余站点。referer格局拉取其余网址的数据也是跨域,可是这一个是由浏览器央求整个财富,财富必要到后,顾客端的本子并不可能说了算那份数据,只好用来显示。可是众多时候,我们都亟需倡导呼吁到别的站点动态获取数据,并将获得到底多少进行更为的管理,那也正是跨域访谈的须要。

 

当今从本领上有多少个方案去消除这么些主题素材。

类数组转对象

在上头的例证中早就关系了一连串数组转数组的主意,再补充八个:

var arrayLike = {0: 'name', 1: 'age', 2: 'sex', length: 3 } // 1. slice Array.prototype.slice.call(arrayLike); // ["name", "age", "sex"] // 2. splice Array.prototype.splice.call(arrayLike, 0); // ["name", "age", "sex"] // 3. ES6 Array.from Array.from(arrayLike); // ["name", "age", "sex"] // 4. apply Array.prototype.concat.apply([], arrayLike)

1
2
3
4
5
6
7
8
9
var arrayLike = {0: 'name', 1: 'age', 2: 'sex', length: 3 }
// 1. slice
Array.prototype.slice.call(arrayLike); // ["name", "age", "sex"]
// 2. splice
Array.prototype.splice.call(arrayLike, 0); // ["name", "age", "sex"]
// 3. ES6 Array.from
Array.from(arrayLike); // ["name", "age", "sex"]
// 4. apply
Array.prototype.concat.apply([], arrayLike)

那正是说为何会讲到类数组对象呢?以及类数组有啥应用吗?

要提起类数组对象,Arguments 对象正是二个类数组对象。在顾客端 JavaScript 中,一些 DOM 方法(document.getElementsByTagName()等)也回到类数组对象。

参加节流函数

事先也一度说过了,这些 touchmove 函数推行的次数很多,即便我们已经用多个 canvas 对重绘做了很大的优化,但 touchmove 照旧有一点大费用。

其一时候本身想开了防抖动和节流,首先防抖动肯定是杰出的,万一作者一向处在 touch 状态,重绘会延迟死的,那个时候节流会好一些。防抖和节流。

先写二个节流函数:

throttle: function(func, delay, mustRun){ var timer, startTime = new Date(), self = this; return function(){ var curTime = new Date(), args = arguments; clearTimeout(timer); if(curTime - startTime >= mustRun){ startTime = curTime; func.apply(self, args); }else{ timer = setTimeout(function(){ func.apply(self, args); }, delay) } } }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
throttle: function(func, delay, mustRun){
  var timer, startTime = new Date(), self = this;
  return function(){
    var curTime = new Date(), args = arguments;
    clearTimeout(timer);
    if(curTime - startTime >= mustRun){
      startTime = curTime;
      func.apply(self, args);
    }else{
      timer = setTimeout(function(){
        func.apply(self, args);
      }, delay)
    }
  }
}

节流函数的意思:在延迟为 delay 的命宫内,假使函数再次接触,则重新计时,这几个效果和防抖动是平等的,第四个参数 mustRun 是多少个时日距离,表示在时刻间隔大于 mustRun 后的贰个函数能够立刻直接执行。

接下来对 touchmove 的回调函数举办改建:

var t = this.throttle(function(e){ e.preventDefault ? e.preventDefault() : null; e.stopPropagation ? e.stopPropagation() : null; var p = this.getTouchPos(e); if(this.touchFlag){ this.update(p); }else{ this.judgePos(p); } }, 16, 16) this.canvas2.addEventListener('touchmove', t, false)

1
2
3
4
5
6
7
8
9
10
11
var t = this.throttle(function(e){
  e.preventDefault ? e.preventDefault() : null;
  e.stopPropagation ? e.stopPropagation() : null;
  var p = this.getTouchPos(e);
  if(this.touchFlag){
    this.update(p);
  }else{
    this.judgePos(p);
  }
}, 16, 16)
this.canvas2.addEventListener('touchmove', t, false)

至于 delay 和 mustRun 的年月距离难题,web 品质里有一个 16ms 的概念,正是说倘若要高达每秒 60 帧,间隔为 一千/60 大概为 16 ms。即使距离大于 16ms 则 fps 会比 60 低。

鉴于此,大家这里将 delay 和 mustRun 都设为 16,在最棒的景况下,也等于最坏的状态下,也许必要 15 + 15 = 30ms 才会实施一遍,那一年要安装多个 8 才说得有理,可是思虑到手指运动是七个连接的过程,怎么可能会每 15 秒试行二遍,经过在线测验,开采安装成 16 效果还行。

属性真的能优化吗,我们来看四个图片,do 和 wantdo 表示真实实行和停放节流函数中排队策画试行。

当 touchmove 速度平常或飞跃的时候:

图片 23

当 touchmove 速度极慢的时候:

图片 24

可以看出来,滑动进度中,速度经常和火速,平均优化了大意上,慢速效果也优化了 20 到 三分一之间,常常手势锁解锁时候,肯定速度比十分的快。可知,节流的优化照旧很明朗的。

驷不如舌是,优化以后的流程性,未有碰到其余影响。

这么些节流函数最后照旧出现了三个 bug:由于是延迟推行的,导致 e.preventDefault 失效,在小弟大浏览器向下滑会产出刷新的事态,那也算事件延迟的三个侵害呢。

消除办法:在节流函数提前撤销暗中同意事件:

throttle: function(func, delay, mustRun){ var timer, startTime = new Date(), self = this; return function(e){ if(e){ e.preventDefault ? e.preventDefault() : null; //提前注销私下认可事件,不要等到 setTimeout e.stopPropagation ? e.stopPropagation() : null; } ... } }

1
2
3
4
5
6
7
8
9
10
throttle: function(func, delay, mustRun){
  var timer, startTime = new Date(), self = this;
  return function(e){
    if(e){
      e.preventDefault ? e.preventDefault() : null; //提前取消默认事件,不要等到 setTimeout
      e.stopPropagation ? e.stopPropagation() : null;
    }
    ...
  }
}

二、简介

WebSocket 公约在二〇〇八年出生,二〇一一年改为国际规范。全部浏览器都早就支持了。

它的最大特征正是,服务器能够主动向顾客端推送消息,客商端也足以积极向服务器发送音讯,是的确的双向平等对话,属于服务器推送本事的一种。

图片 25

别的特色包含:

(1)创建在 TCP 商业事务之上,服务器端的达成相比便于。

(2)与 HTTP 公约抱有独具特殊的优越条件的包容性。私下认可端口也是80和443,何况握手阶段选用HTTP 左券,由此不便于屏蔽,能由此种种 HTTP 代理服务器。

(3)数据格式非常轻量,质量开支小,通讯高效。

(4)能够发送文书,也能够发送二进制数据。

(5)未有同源限制,客商端能够与自由服务器通讯。

(6)合同标识符是ws(假如加密,则为wss),服务器网站正是 UPAJEROL。

ws://example.com:80/some/path

1
2
ws://example.com:80/some/path
 

图片 26

总结

通过本文的上学,读者能够调整Firebug的基本作用。Firebug已经日渐变为多少个调度平台,而不独有是三个轻易易行的Firefox扩充插件。学好Firebug能给以往的学习和做事提供一定的援救。

参照他事他说加以考察文献:《锋利的JQuery(第2版)》

1 赞 3 收藏 1 评论

图片 27

1、JSONP跨域访谈

应用浏览器的Referer方式加载脚本到顾客端的方法。以:

<script type="text/javascript" src=";

1
<script type="text/javascript" src="http://api.com/jsexample.js"></script>

这种方式获取并加载别的站点的JS脚本是被允许的,加载过来的剧本中要是有定义的函数或许接口,能够在地头利用,那也是大家用得最多的脚本加载形式。但是那个加载到地头脚本是不能够被涂改和拍卖的,只好是援引。

而跨域访谈供给就是访谈远端抓取到的数量。那么是或不是扭转,本地写好七个数码管理函数,让央求服务端扶助成功调用进程?JS脚本允许那样。

<script type="text/javascript"> var localHandler = function(data) { alert('小编是本地函数,能够被跨域的remote.js文件调用,远程js带来的数码是:'

  • data.result); }; </script> <script type="text/javascript" src=";
1
2
3
4
5
6
7
<script type="text/javascript">
var localHandler = function(data)
{
    alert('我是本地函数,可以被跨域的remote.js文件调用,远程js带来的数据是:' + data.result);
};
</script>
<script type="text/javascript" src="http://remoteserver.com/remote.js"></script>

远端的服务器上面定义的remote.js是这么的:

JavaScript

localHandler({"result":"我是长途js带来的数目"});

1
localHandler({"result":"我是远程js带来的数据"});

上边首先在本地定义了一个函数localHandler,然后远端重临的JS的始末是调用这一个函数,重临到浏览器端施行。同有的时候间在JS内容准将顾客端必要的数额再次来到,那样数据就被传输到了浏览器端,浏览器端只须求修改管理格局就能够。这里有一部分限量:1、客户端脚本和服务端必要某些合营;2、调用的数目必须是json格式的,否则客商端脚本不也许管理;3、只好给被引述的服务端网站发送get央求。

<script type="text/javascript"> var localHandler = function(data) { alert('笔者是本地函数,能够被跨域的remote.js文件调用,远程js带来的多少是:'

  • data.result); }; </script> <script type="text/javascript" src=";
1
2
3
4
5
6
7
<script type="text/javascript">
var localHandler = function(data)
{
    alert('我是本地函数,可以被跨域的remote.js文件调用,远程js带来的数据是:' + data.result);
};
</script>
<script type="text/javascript" src="http://remoteserver.com/remote.php?callBack=localHandler"></script>

服务端的PHP函数也许是那般的:

PHP

<?php $data = "......."; $callback = $_GET['callback']; echo $callback.'('.json_encode($data).')'; exit; ?>

1
2
3
4
5
6
7
8
<?php
 
$data = ".......";
$callback = $_GET['callback'];
echo $callback.'('.json_encode($data).')';
exit;
 
?>

如此那般就可以依照客商端钦命的回调拼装调用进度。

传递参数

将参数从贰个函数字传送递到另多少个函数

// 使用 apply 将 foo 的参数字传送递给 bar function foo() { bar.apply(this, arguments); } function bar(a, b, c) { console.log(a, b, c); } foo(1, 2, 3)

1
2
3
4
5
6
7
8
9
// 使用 apply 将 foo 的参数传递给 bar
function foo() {
    bar.apply(this, arguments);
}
function bar(a, b, c) {
   console.log(a, b, c);
}
 
foo(1, 2, 3)

H5 手势解锁

扫码在线查看:

图片 28

依旧点击查阅手机版。

项目 GitHub 地址,H5HandLock。

首先,小编要证实一下,对于那几个项目,作者是参照别人的,H5lock。

本人认为四个相比较合理的解法应该是选择 canvas 来完结,不晓得有未有大神用 css 来完成。要是纯用 css 的话,能够将连线先安装 display: none,当手指划过的时候,突显出来。光设置那么些本该就至极辛劳呢。

事先掌握过 canvas,但尚无当真的写过,下边就来介绍本身近日学习 canvas 并促成 H5 手势解锁的经过。

四、客商端的 API

WebSocket 客商端的 API 如下。

概述

  FireBug是二个用来网址前端开拓的工具,它是FireFox浏览器的叁个扩大插件。它能够用来调节和测量试验JavaScript、查看DOM、解析CSS、监察和控制网络流量以及举行Ajax交互等。它提供了差十分的少前端开辟必要的方方面面意义。官网:www.getfirebug.com

如何获得Firebug?

因为它是Firefox浏览器的二个增加插件,所以首先需求下载Firefox浏览器。读者能够访谈www.mozilla.com下载并设置Firefox浏览器。安装达成后用它访谈

进去下图所示页面。点击”增加到Firefox”,然后点击”立刻安装”,最终重复开动Firefox浏览器就能够形成安装。

图片 29

跨域访谈和防盗链基本原理(二)

2015/10/18 · HTML5 · 跨域, 防盗链

原来的文章出处: 童燕群 (@童燕群)   

length属性

Arguments对象的length属性,表示实参的长短,举个例证:

function foo(b, c, d){ console.log("实参的长度为:" + arguments.length) } console.log("形参的尺寸为:" + foo.length) foo(1) // 形参的长短为:3 // 实参的长度为:1

1
2
3
4
5
6
7
8
9
10
function foo(b, c, d){
    console.log("实参的长度为:" + arguments.length)
}
 
console.log("形参的长度为:" + foo.length)
 
foo(1)
 
// 形参的长度为:3
// 实参的长度为:1

一些 bugs

稍稍 bugs 在做的时候就意识了,一些 bug 后来用手机测量检验的时候才发觉,举个例子,小编用 chrome 的时候,未有开采那些bug,当自个儿用 android 手提式有线电话机 chrome 浏览器测量试验的时候,发掘当作者 touchmove 向下的时候,会接触浏览器的下拉刷新,消除办法:加了三个 preventDefault,没悟出居然成功了。

this.canvas.addEventListener('touchmove', function(e){ e.preventDefault ? e.preventDefault() : null; var p = self.getTouchPos(e); if(self.touchFlag){ self.update(p); }else{ self.judgePos(p); } }, false)

1
2
3
4
5
6
7
8
9
this.canvas.addEventListener('touchmove', function(e){
  e.preventDefault ? e.preventDefault() : null;
  var p = self.getTouchPos(e);
  if(self.touchFlag){
    self.update(p);
  }else{
    self.judgePos(p);
  }
}, false)

七、参考链接

  • How to Use WebSockets
  • WebSockets – Send & Receive Messages
  • Introducing WebSockets: Bringing Sockets to the Web

    1 赞 9 收藏 评论

图片 30

10分钟学会前端调节和测量检验利器——FireBug

2015/09/17 · HTML5, JavaScript · 1 评论 · 调试

最早的小讲出处: 惟吾德馨(@Allen_Bryant)   

读写

console.log(array[0]); // name console.log(arrayLike[0]); // name array[0] = 'new name'; arrayLike[0] = 'new name';

1
2
3
4
5
console.log(array[0]); // name
console.log(arrayLike[0]); // name
 
array[0] = 'new name';
arrayLike[0] = 'new name';

编辑:美高梅游戏网站 本文来源:跨域访问和防盗链基本原理,10分钟学会前端调节

关键词:

  • 上一篇:没有了
  • 下一篇:没有了