回调函数

分享到朋友圈前端配置组件

◇◆丶佛笑我妖孽 提交于 2020-03-01 14:52:10
这配置分享到朋友圈,需要前后端配合才能完成 后端开发通过token验证生成返回4个参数: 前端根据这4个参数初始化微信分享 得到这几个参数一般可以向后台请求一个连接,如果跨域可以使用jsonp请求, wx.config初始化完成后,会调用wx.ready配置具体分享参数。 完整代码如下: var ShareToWx = window.ShareToWx || {}; (function(){ ShareToWx = function(options){ var options = options || {}; this.shareTitle = options.shareTitle || '';//设置分享标题,如果为空,微信会取页面title,document.title this.shareFriTitle = options.shareFriTitle || '';//设置分享给朋友标题,如果为空,取shareTitle 或者取页面title,document.title this.shareDesc = options.shareDesc || '';//设置分享描述 this.shareUrl = options.shareUrl || location.href.split('#')[0];//设置分享链接 this.shareImg = options

h5网页在微信里打开 右上角分享到微信好友或者朋友圈

你。 提交于 2020-02-29 23:37:14
首先你需要一个分享接口地址,然后在自定义图片 标题 描述 如下: <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> <script> $(function() { //微信分享 $.ajax({ "url":"https://***.***.com/getJsAPITicket", //接口地址 "type":"Get", "dataType":"json", "data":{"url": window.location.href}, "success":function(data){ wxstart(data, ""); } }); }); function wxstart(data, url){ var url = ''; //分享的文章地址 var appId = data.appId; var timestamp = data.timestamp; var nonceStr = data.nonceStr; var signature = data.signature; wx.config({ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。

callback自定义测试

拥有回忆 提交于 2020-02-29 22:25:51
标题callback自定义测试 简要说明: 1.由于浏览器的 同源策略 (域名,协议,ip端口相同),非同源域名之间传递会存在限制。 2. JSONP (用于解决跨域数据传输的问题,利用了HTML里元素标签的开放策略src引入Js文件,远程调用动态生成JSON文件来实现数据传递,并以任意javascript的形式传递,一般使用 Callback(回调函数返回,由于没有使用白名单的方法进行限制Callback的函数名,导致攻击者可以自定义Callback内容,从而触发XSS等漏洞)由浏览器的javascript引擎负责解释运行。 漏洞原理分析: 1.接口开发时,接收回调函数的参数值在进行拼接前未对恶意数据进行合理化处理,导致攻击者插入恶意的HTML标签并在返回的JSON数据格式原样输出; 2.同时服务端未**正确设置响应头content-type,**导致返回的json数据被浏览器当做Html内容进行解析,就可能造成xss等漏洞。 callback自定义测试条件: 1.一个使用jsonp技术的接口,参数中包含回调函数的名称(jasonp,callback,); 2.服务端返回的json数据时,响应头为 content-type: text/html; 3.服务端未对回调函数参数进行过滤净化。 callback自定义测试步骤: 1.设置代理到burpsuite; 2.网站根目录开始爬取

深入浅出NodeJS——异步I/O

一个人想着一个人 提交于 2020-02-29 19:36:50
底层操作系统,异步通过信号量、消息等方式有着广泛的应用。 PHP语言从头到尾都是以同步堵塞方式执行,利于程序猿顺序编写业务逻辑。 异步I/O、事件驱动、单线程构成Node的基调。 why异步I/O (1)、用户体验 在Web2.0中Ajax广泛应用异步刷新机制能够更好的提高用户体验,消除UI堵塞。后端相同採用异步I/O能够有效较少同一时候请求多个资源的效应时间其为max(M,N)。 (2)、资源分配 多任务主流方式: a. 单线程异步I/O b. 多线程并行 多线程的代价在于创建线程和运行期线程上下午切换的开销较大。在复杂场景中,多线程常常面临锁、状态同步的问题。但多线程能够更有效的利用多核CPU,提高利用率。 NodeJS利用单线程远离多线程死锁、状态同步等问题;利用异步I/O,让单线程远离堵塞,以更好利用CPU。 为了弥补单线程无法利用多核CPU特点,Node採用类似Web Workers的子进程。 异步I/O 操作系统内核对于I/O仅仅有两种方式:堵塞和非堵塞 堵塞I/O一个特点是调用之后一定要等到系统内核层面完毕全部操作后,调用才结束。其造成CPU等待I/O,浪费时间和资源,CPU利用不充分。 非堵塞I/O不同之处在于调用之后会马上返回。其问题在于为了获取完整的数据,应用程序须要反复调用I/O操作来确认是否完毕,这样的反复调用判定是否完毕的技术叫做 轮询 堵塞I

JavaScript的计时器的工作原理

只愿长相守 提交于 2020-02-29 17:00:18
最近都在看一些JavaScript原理层面的文章,恰巧看到了jQuery的作者的一篇关于JavaScript计时器原理的解析,于是诚惶诚恐地决定把原文翻译成中文,一来是为了和大家分享,二来是为了加深自己对于JavaScript的理解。原文链接: http://ejohn.org/blog/how-javascript-timers-work/ 原文翻译: 从基础层面来讲,理解JavaScript计时器的工作原理是很重要的。由于JavaScript是单线程的,所以很多时候计时器并不是表现得和我们的直观想象一样。让我们从下面的三个函数开始,它们能够让我们有机会去构造和操作计时器。 var id =setTimeout(fn, delay); -创建了一个简单的计时器,在经过给定的时间后,回调函数将会被执行。这个函数会返回一个唯一的ID,便于在之后某个时间可以注销这个计时器。 var id = setInterval(fn, delay); -和setTimeout类似,但是每经过一段时间(给定的延时),所传递的函数就会被执行一次,直到这个定时器被注销。 clearInterval(id); , clearTimeout(id); -接受一个计时器ID(由之前两种计时器返回)并且停止计时器回调函数的执行。 为了理解计时器的内部工作原理,我们首先需要了解一个非常重要的概念

JavaScript函数之高阶函数

喜欢而已 提交于 2020-02-29 07:30:46
高阶函数(higher-order function)—如果一个函数接收的参数为或返回的值为函数,那么我们可以将这个函数称为高阶函数。众所周知,JavaScript是一种弱类型的语言:JavaScript的函数既不对输入的参数,也不对输出值作强定义和类型检查,那么函数可以成为参数,也可以成为输出值,这就体现了JavaScript对高阶函数的原生支持。 一、参数为函数的高阶函数: function funcTest(f){ //简易判断一下实参是否为函数 if((typeof f)=="function"){ f(); } } funcTest(function(){ }); 这是一个简易的将参数作为函数的高阶函数。在调用funcTest时,输入一个函数作为参数,在funcTest内部执行这个输入的匿名函数,当然这样的代码片段没有什么实际意义。 二、返回值为函数的高阶函数: function funcTest(){ return function(){ }; } var f=funcTest(); 调用funcTest返回一个函数。 三、一个复杂一点的例子: //Number类型相加 function addInt(a,b){ return parseInt(a)+parseInt(b); } //String类型相加 function addString(a,b){ return

STM32对HAL库的外部中断处理

谁说胖子不能爱 提交于 2020-02-29 06:27:47
这次外部中断是通过检测外部中断实现按键控制LED的开关。 每一个IO口都可作为外部中断口,将你要外部中断的IO口在CUBEMX中进行设置。 中断线能够自动识别,不用手动去改动。其他基本设置好之后,即完成了外部中断的初始化。此时要进入中断函数,印象中大家的外部中断函数应该是这个, 但是在HAL库文件中有此函数的描述, 即它会执行一个外部中断的回调函数。 在库文件中还找到了——weak 该回调函数的定义,weak其实意思就是定义了一个初始化的函数,你不改也可以,你改了,就按照你改的函数来执行。 所以我们需要在main文件中重构一个回调函数,把它当做是中断函数来用就好了。 即完成外部中断的写法。 之前说的串口中断调用的回调函数,应该也是一个道理一个原理,在此说明一下。。 来源: https://www.cnblogs.com/zjx123/p/11866018.html

Python os模块介绍

倾然丶 夕夏残阳落幕 提交于 2020-02-28 21:54:37
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd os.curdir 返回当前目录: ('.') ? 1 os.pardir 获取当前目录的父目录字符串名:('..') os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 os.remove() 删除一个文件 os.rename("oldname","newname") 重命名文件/目录 os.stat('path/filename') 获取文件/目录信息 os.symlink('path/filename','ln_filename') 创建符号链接,源需绝对路径 os.utime() 修改时间属性 >>> import os

NodeJS学习第一季-文件I/O

痴心易碎 提交于 2020-02-28 21:46:41
1、writeFile函数的基本用法 fs模块提供writeFile函数,可以异步的将数据写入一个文件, 如果文件已经存在则会被替换。 var fs= require("fs"); //文件名, 内容, 回调函数 fs.writeFile('test.txt', 'Hello Node', function (err) { if (err) throw err; console.log('Saved successfully'); //文件被保存 }); 数据参数可以是string或者是Buffer,编码格式参数可选,默认为"utf8",回调函数只有一个参数err。 2、appendFile函数的基本用法 writeFile函数虽然可以写入文件,但是如果文件已经存在,我们只是想添加一部分内容,它就不能满足我们的需求了,很幸运,fs模块中还有appendFile函数,它可以将新的内容追加到已有的文件中,如果文件不存在,则会创建一个新的文件 fs.appendFile('test.txt', 'data to append', function (err) { if (err) throw err; //数据被添加到文件的尾部 console.log('The "data to append" was appended to file!'); }); 3、exists函数的基本用法

cpp模仿C#事件机制(1) 无参数版实现

对着背影说爱祢 提交于 2020-02-28 15:35:30
cpp模仿C#事件机制(1) 无参数版实现 githubpage 后续更新会快一些:https://puzzzzzzle.github.io 起因 之前写unity时,感觉c#的事件机制超好用,就想在万能的c++中实现一下 看了网上的一些实现,大部分都是只能注册一个回调函数的,这有啥用??? 要么就是使用时要继承一大堆东西,一点也不方便 设计 本身很简单,就是一个观察者模式,麻烦的是对回调函数的管理 需要一个容器存储回调函数,set,vector都行 要装进容器中,那么你的回调函数就要支持一些符号 这里实现了两种事件发布器 基于 std::unordered_set ,重复插入会返回false,调用顺序和插入顺序无关 基于 std::vector ,允许重复插入,调用顺序和插入顺序相同 两种事件发布器都提供注册常驻回调函数和一次性回调函数接口(扩展了下,还是有这方面的需求的) 多线程只是简单的分类锁了下,有需要的话可以扩展各种 无锁生产者消费者模型 或者 由订阅器维护回调函数,发布器维护订阅器引用 回调函数过期 回调函数已经被释放会导致空指针问题,程序会core,c#中也有这个问题 这里尽可能解决下 使用 std::shared_ptr 包裹回调函数,订阅器自己必须维护ptr 发布器使用 std::weak_ptr 来指向回调函数 已经过期的直接从队列中删除,报告下