本文目录一览:
小程序开发有哪些坑
1. JSON 配置文件小程序中,包含唯一的全局配置文件 app.json,以及每个页面的配置文件 page.json。每单页页面相应的 JSON 文件会覆盖与 app.json 相同的配置项。如下,是一个包含了所有配置选项的简单配置 app.json。"pages": [ //设置页面的路径"pages/index/index", //不需要写index.wxml,index.js,index,wxss,框架会自动寻找并整合"pages/logs/logs"],"window": { //设置默认窗口的表现形式
"navigationBarBackgroundColor": "#ffffff", //顶部导航栏背景色
"navigationBarTextStyle": "black", //顶部导航文字的颜色 black/white
"navigationBarTitleText": "微信接口功能演示", //顶部导航的显示文字
"backgroundColor": "#eeeeee", //窗口的背景色
"backgroundTextStyle": "light", //下拉背景字体、loading 图的样式,仅支持 dark/light
"enablePullDownRefresh": "false", //是否支持下拉刷新 ,不支持的话就直接不写!
"disableScroll": true, // 设置true不能上下滚动,true/false,注意!只能在 page.json 中有效,无法在 app.json 中设置该项。},"tabBar": { //底部tab或者顶部tab的表现,是个数组,最少配置2个,最多5个
"list": [{ //设置tab的属性,最少2个,最多5个
"pagePath": "pages/index/index", //点击底部 tab 跳转的路径
"text": "首页", //tab 按钮上的文字
"iconPath": "../img/a.png", //tab图片的路径
"selectedIconPath": "../img/a.png" //tab 在当前页,也就是选中状态的路径
}, { "pagePath": "pages/logs/logs", "text": "日志"
}], "color": "red", //tab 的字体颜色
"selectedColor": "#673ab7", //当前页 tab 的颜色,也就是选中页的
"backgroundColor": "#2196f3", //tab 的背景色
"borderStyle": "white", //边框的颜色 black/white
"position": "bottom" //tab处于窗口的位置 top/bottom
},"networkTimeout": { //默认都是 60000 秒一分钟
"request": 10000, //请求网络超时时间 10000 秒
"downloadFile": 10000, //链接服务器超时时间 10000 秒
"uploadFile": "10000", //上传图片 10000 秒
"downloadFile": "10000" //下载图片超时时间 10000 秒
},"debug": true //项目上线后,建议关闭此项,或者不写此项
2. JS 逻辑层
小程序的逻辑层由 JavaScript 语言完成。但因为小程序不在浏览器中运行,所以 JS 在 web 浏览器中的一些函数不能用,如 document、window 等。
app.js 有全局的小程序生命周期,page.js 有自己本页面的生命周期。
2.1 注册小程序 app.js
这一步骤,有这几个需要注意的地方:
必须在 app.js 中,使用 app() 函数注册微信小程序。全局小程序中,只能注册一次;
不能在 app() 内的函数中调用 getApp()(小程序实例),使用 this 就可以拿到小程序的实例;
不要在 onLaunch 的时候 getCurrentPage(),因为此时 page 还没有生成;
通过其他子页面调用 getApp() 获取实例后,不要私自调用小程序全局的生命周期方法;
可以通过 var app=getApp() 获取小程序的实例。
app ( { // 小程序生命周期的各个阶段
onLaunch: function(){},//当小程序初始化完成时,会触发 onLaunch(全局只触发一次)
onShow: function(){},//当小程序启动,或从后台进入前台显示,会触发 onShow
onHide: function(){},//当小程序从前台进入后台隐藏,会触发 onHide
onError: function(){},//当小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息
// 自定义函数或者属性,用 this可以访问
...
})
2.2 注册小程序的页面 page.js
Page() 用来注册一个页面,维护该页面的生命周期以及数据。
Page({ data: { //页面的初始数据//调用:{{text}} {{array[0].msg}}
text: 'init data', array: [{ msg: '1'
}, { msg: '2'
}]
}, // 页面生命周期的各个阶段
onLoad: function () {}, //生命周期函数--监听页面加载
onShow: function () {}, //生命周期函数--监听页面初次渲染完成
onReady: function () {}, //生命周期函数--监听页面显示
onHide: function () {}, //生命周期函数--监听页面隐藏
onUnload: function () {}, //生命周期函数--监听页面卸载
onPullDownRefresh: function () {}, //页面相关事件处理函数。如果需要监听用户下拉动作,需要 在app.json中配置 "enablePullDownRefresh":"true" 允许上拉刷新
onReachBottom: function () {}, //页面上拉触底事件的处理函数
onShareAppMessage: function () { //用户点击右上角分享
return { title: '自定义分享标题', desc: '自定义分享描述', path: '/page/user?id=123'
}
}, // 自定义函数或者属性如:
customData: { hi: 'MINA'
}...
})
2.3 公共模块 util.js
公共模块方法需要通过 module.exports 对外暴露接口,使用的时候需要利用 require(path),将文件引入。如:
function sayHello(name) {//公共方法util类
console.log(`Hello ${name} !`)
}module.exports.sayHello = sayHello//用module.exports 对外暴露接口
//先引入文件,是新建的一个 utils 包,公共方法在 util.js 里面var util = require('../../utils/util.js')
Page({//调用类
onLoad: function () {// 使用时,用 util 引用名调用,如:util.sayHello()
util.sayHello('我是传的值');
}
})
2.4 数据操作
setData() 不能直接操作数据,例如 this.data.text="xxxxx" 就是错误的。你需要在 this.setData () 之中,进行数据的操作。
同时,这里有作用域的问题。比如,需要在局部函数中使用,就需要 .bind(this)。
如果你需要操作全局的数据,你需要在 app.js 中进行相应设置,例如:
App({// app.js
globalData: 1})// 某 page.jsconsole.log(getApp().globalData)
3. 视图层 WXML
视图层的数据绑定均来自于 Page 中的 data,想要修改相应值,你需要用到 this.setData。数据绑定使用两对花括号,将变量名包起来。
3.1 条件渲染
你可以利用 if 和 else,在视图层上编写在特定情况下,出现的不同的视图结果。
view wx:if="{{zhenjiaa=='123'}}"123334/viewview wx:if="{{zhanjia}}"123334/viewview wx:if="{{len 5}}"大于5我就显示了 /viewview wx:if="{{length 5}}" 1 /viewview wx:elif="{{length 2}}" 2 /viewview wx:else 3 /viewblock wx:if="{{true}}"view view1 /viewview view2 /view/block
很多人会将 CSS 中的 display: hidden 属性,将其做一个比较。
微信小程序中的 wx:if 是惰性的。如果不符合渲染条件,它不会渲染相应部分;
使用 display: hidden 时,元素始终渲染,只是视图层上没有显示,用户看不见。
如果你的小程序有元素显示频繁切换的需求,建议你使用 display: hidden,能够为用户提供能顺畅的使用体验。
3.2 列表渲染
相当于让 WXML 处理一个循环。
在 WXML 中,你可以这样来建立一个 for 循环:
view wx:for="{{array}}" {{index}}:{{item}} /view
然后在相应的 JS 中,新建一个数组:
page.jsPage({ data: {
array: [1, 2, 3, 4, 5]
}
})
需要注意的是,如果列表中的项需要动态添加到列表中,并希望项目保持原有的特征和状态,那么你应该使用 wx:key。
wx:key 有两种形式:
字符串:wx:key="unique"
保留关键字:wx:key="*this"
3.3 运算
WXML 可以执行简单的运算任务。例如:
view {{a + b}} + {{c}} + d /view
也可以做到字符串拼接:
view{{"hello" + name}}/view
甚至,你可以使用 ... 在 WXML 中展开对象。
3.4 模板
name 定义组件模版的名称,引用模版的时候使用 is 属性指定模版的名字,is 可以进行简单的三目运算,需要传入模版需要的 data 数据。
因为模版拥有自己的作用域,所以只能使用 data 传入数据,而不接受双花括号的写法。
template name="msgItem"viewtext {{index}}: {{msg}} /texttext Time: {{time}} /text/view/template!-- 其他代码 --template is="msgItem" data="{{...item}}"/
3.5 公共模块的引用
WXML 提供 import 和 include 两种文件引用方式。
import 有作用域的概念,不能多重引用。
!-- B.wxml --import src="a.wxml"/!-- A.wxml --template name="A"
text A template /text/template
而 include 就可以多重引用了。
!--引用 header、其中 header.wxml 中也引用了 footer.wxml--include src="header.wxml"/view body /view!-- header.wxml --view header /viewinclude src="footer.wxml"/
3.6 事件
名称以 bind 开头的事件不阻止冒泡,名称以 catch 开头的事件冒泡是阻止的。如 bindTap 和 catchTab。
在 WXML 中,可以使用 dataset 定义 data 中的数据,会通过事件传递。它的事件以 data- 开头,多个单词以 - 链接,如 data-a-b。
需要注意的是,使用这种方式定义的变量不能有大写。它会自动转成驼峰命名,调取的时候去驼峰命名的名字。
4. WXSS
WXSS 的用法类似于 CSS,并在 CSS 的基础上,扩展了 rpx 尺寸单位和样式导入功能。
WXSS 可以使用内联样式,但这样会影响渲染速度。
每个页面自己的 page.wxss 样式表,会覆盖全局样式表 app.wxss。
xss攻击危害有哪些
、对于那些半年没有更新的小企业网站来说,发生XSS漏洞几乎没有什么用
2、但是在各类的社交平台,邮件系统,开源流行的Web应用,BBS,微博等场景中,造成的杀伤力却十分强大。
3、劫持用户cookie是最常见的跨站攻击形式,通过在网页中写入并执行脚本执行文件(多数情况下是JavaScript脚本代码),劫持用户浏览器,将用户当前使用的sessionID信息发送至攻击者控制的网站或服务器中。
4、又可以称为“框架钓鱼”。利用JS脚本的基本功能之一:操作网页中的DOM树结构和内容,在网页中通过JS脚本,生成虚假的页面,欺骗用户执行操作,而用户所有的输入内容都会被发送到攻击者的服务器上。
5、挂马(水坑攻击)
6、有局限性的键盘记录
概念
跨站脚本 ( Cross-Site Scriptin ) 简称xss,是由于Web应用程序对用户的输入过滤不足而产生的.攻击者利用网站漏洞把恶意的脚本代码(通常包括HTML代码和客户端 Javascript脚本)注入到网页之中,当其他用户浏览这些网页时,就会执行其中的恶意代码,对受害用户可能采取 Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击.
危害
1、网络钓鱼,包括盗取各类用户账号;
2、窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作;
3、劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账、强制发表日志、发送电子邮件等;
4、强制弹出广告页面、刷流量等;
5、网页挂马,进行恶意操作,例如任意篡改页面信息、删除文章等;
6、进行大量的客户端攻击,如DDoS攻击;
7、获取客户端信息,例如用户的浏览历史、真实IP、开放端口等;
8、控制受害者机器向其他网站发起攻击;
9、结合其他漏洞,如CSRF漏洞,实施进一步作恶;
10、提升用户权限,包括进一步渗透网站;
11、传播跨站脚本蠕虫等;
xss有线手柄和无线手柄区别
有线比无限反应更快。
并且有线不用担心没电问题,无限需要担心电池没电,但无限不用担心线路损坏问题,无限没有线路不用担心被踩,自然也不用担心坏掉。
如何成为前端工程师?
一、技术的必须的
作为一名最基础的前端工程师你必须掌握HTML、CSS和JavaScript。三者必须同时精通,类似我字样对前端知识一知半解的,一遇到问题就停下工作就四处搜索解决方案的,首先就算不上一个合格的前端人员。像我这样的如果当了前端工程师那工期肯定是不能保证的。合格的前端工程师第一要学会的就是在没有任何外来帮助的情况下(包括搜索引擎),能够完成大多数任务。
以下知识点是作为一个前端工程师必须了解和熟悉的:
DOM结构——两个节点之间可能存在哪些关系以及如何在节点之间任意移动。
DOM操作——怎样添加、移除、移动、复制、创建和查找节点。
事件——怎样使用事件以及IE和DOM事件模型之间存在哪些主要差别。
XMLHttpRequest——这是什么、怎样完整地执行一次GET请求、怎样检测错误。
严格模式与混杂模式——如何触发这两种模式,区分它们有何意义。
盒模型——外边距、内边距和边框之间的关系,IE 8中的盒模型有什么不同。
块级元素与行内元素——怎么用CSS控制它们、它们怎样影响周围的元素以及你觉得应该如何定义它们的样式。
浮动元素——怎么使用它们、它们有什么问题以及怎么解决这些问题。
HTML与XHTML——二者有什么区别,你觉得应该使用哪一个并说出理由。
JSON——它是什么、为什么应该使用它、到底该怎么使用它,说出实现细节来。
上述这些知识点都应该是你“想都不用想”就知道的东西。除了上述的前端知识,也还需学会至少一门后端编程语言,让你自己学会如何与后端进行更好的交互。
很多前端工程师对一些库非常的熟悉,jQuery,Bootstrap等,但是对于库的熟悉并不能提现你的优秀,整整优秀的是那些理解库背后的机制,特别是能够徒手写出一个自己的库的人。
真正合格的前端工程师是能实现具体的功能要求,而优秀的前端工程师需要解决的问题是寻找一个最优的解决方案。
二、沟通很重要
优秀的前端工程师需要具备良好的沟通能力,因为你的工作与很多人的工作息息相关。在任何情况下,前端工程师至少都要满足下列四类客户的需求。
产品经理——这些是负责策划应用程序的一群人。他们能够想象出怎样通过应用程序来满足用户需求,以及怎样通过他们设计的模式赚到钱(但愿如此)。一般来说,这些人追求的是丰富的功能。
UI设计师——这些人负责应用程序的视觉设计和交互模拟。他们关心的是用户对什么敏感、交互的一贯性以及整体的好用性。他们热衷于流畅靓丽但并不容易实现的用户界面。
项目经理——这些人负责实际地运行和维护应用程序。项目管理的主要关注点,无外乎正常运行时间——应用程序始终正常可用的时间、性能和截止日期。项目经理追求的目标往往是尽量保持事情的简单化,以及不在升级更新时引入新问题。
最终用户——当然是应用程序的主要消费者。尽管我们不会经常与最终用户打交道,但他们的反馈意见至关重要;没人想用的应用程序毫无价值。最终用户要求最多的就是对个人有用的功能,以及竞争性产品所具备的功能。
不要在没有作出评估之前就随便接受某项任务。你必须始终记住,一定先搞清楚别人到底想让你干什么,不能简单地接受“这个功能有问题”之类的大概其的说法。而且,你还要确切地知道这个功能或设计的真正意图何在。“加一个按钮”之类的任务并不总意味着你最后会加一个按钮。还可能意味着你会找产品经理,问一问这个按钮有什么用处,然后再找UI设计师一块探讨按钮是不是最佳的交互手段。要成为优秀的前端工程师,这种沟通至关重要。
那么,前端工程师应该最关注哪些人的意见呢?答案是所有这四类人。优秀的前端工程师必须知道如何平衡这四类人的需求和预期,然后在此基础上拿出最佳解决方案。由于前端工程师处于与这四类人沟通的交汇点上,因此其沟通能力的重要性不言而喻。如果一个非常酷的新功能因为会影响前端性能,必须删繁就简,你怎么跟产品经理解释?再比如,假设某个设计如果不改回原方案可能会给应用程序造成负面影响,你怎么才能说服UI设计师?作为前端工程师,你必须了解每一类人的想法从何而来,必须能拿出所有各方都能接受的解决方案。从某种意义上说,优秀的前端工程师就像是一位大使,需要时刻抱着外交官的心态来应对每一天的工作。
专业技术可能会引领你进入成为前端工程师的大门,但只有运用该技术创造的应用程序以及你跟他人并肩协同的能力,才会真正让你变得优秀。
三、提升无止境
优秀的前端工程师应该具备快速学习能力。推动Web发展的技术并不是静止不动的,这些技术几乎每天都在变化,如果没有快速学习能力,你就跟不上Web发展的步伐。你必须不断提升自己,不断学习新技术、新模式;仅仅依靠今天的知识无法适应未来。Web的明天与今天必将有天壤之别,而你的工作就是要搞清楚如何通过自己的Web应用程序来体现这种翻天覆地的变化。
四、前端开发知识架构
前端工程师
SVG/Canvas/VML
D3/Raphaël/DataV
知识管理/总结分享
沟通技巧/团队协作
需求管理/PM
交互设计/可用性/可访问性知识
编译原理
计算机网络
操作系统
算法原理
软件工程/软件测试原理
D2/WebRebuild
NodeParty/W3CTech/HTML5梦工厂
JSConf/沪JS(JSConf.cn)
QCon/Velocity/SDCC
JSConf/NodeConf
YDN/YUIConf
MongoDB/CouchDB
HTML5/CSS3
响应式设计
Zeptojs/iScroll
V5/Sencha Touch
PhoneGap
jQuery Mobile
CSRF/XSS
ADsafe/Caja/Sandbox
类库模块化
业务逻辑模块化
文件加载
CommonJS/AMD
YUI3模块
LABjs
SeaJS/Require.js
压缩合并
文档输出
项目构建工具
YUI Compressor
Google Clousure Complier
CleanCSS/UglifyJS
JSDoc
Dox/Doxmate
make/Ant
GYP
Grunt
Yeoman
数据结构
OOP/AOP
原型链/作用域链
闭包
函数式编程
设计模式
Javascript Tips
JSPerf
YSlow 35 rules
PageSpeed
HTTPWatch
DynaTrace’s Ajax
高性能JavaScript
HTTP1.1
ECMAScript3/5
W3C/DOM/BOM/XHTML/XML/JSON/JSONP
CommonJS/AMD
HTML5/CSS3
jQuery/Underscore/Mootools/Prototype.js
YUI3/Dojo/ExtJS
Backbone/KnockoutJS/Emberjs
Coding style
单元测试
自动化测试
JSLint/JSHint
CSSLint
Markup Validation Service
QUnit/Jasmine
Mocha/Should/Chai
WebDriver
IDE
调试工具
版本管理
VIM/Sublime Text2
Notepad++/EditPlus
WebStorm
Firebug/Firecookie
YSlow
IEDeveloperToolbar/IETester
Fiddler
Git/SVN
Github/Bitbucket/Google Code
HTML/HTML5
CSS/CSS3
PhotoShop/Paint.net
JavaScript/Node.js
JavaScript语言精粹
IE6/7/8/9
Firefox
Chrome/Safari/Opera
浏览器
编程语言
切页面
开发工具
代码质量
前端库/框架
前端标准/规范
性能
编程知识储备
部署流程
代码组织
安全
移动Web
JavaScript生态
前沿技术社区/会议
计算机知识储备
软技能
可视化
后端工程师
Unix/Linux/OS X/Windows
SQL
MySQL/MongoDB/Oracle
C/C++/Java/PHP/Ruby/Python/…
编程语言
数据库
操作系统
数据结构
参考链接:
JacksonTian/fks · GitHub
前端开发时遇到过什么坑?尤其是webapp开发时
过去,应用开发需要注重大量的专业知识,程序员只需关注单一的语言(比如COBOL、RPG、C++等),并利用该语言创建应用。Web不再是单单关注独立的一面。相反,一个现代化的Web应用开发者应该是“样样精通”。他们不仅要理解开发方面还要明白Web应用安全漏洞问题,了解如何与其他设备集成在一起等等。往深了说,他们还需要了解这些应用程序是如何运行在平板电脑和智能手机上的。
换句话说,Web应用开发正变得更加复杂化。它迫切需要一个不断增加以及不断发展的配套技能。
掌握六大技能后,估计Web应用开发时候就会避免一些坑。
1. 安全
过去,企业在内部安装应用,基于防火墙背后的应用无法与第三方服务或应用进行通信。而随着软件的发展,现代Web应用能够与其他设备进行集成,并存储在云服务器上或者访问多种类型设备。因此,安全问题显得尤为重要。
“作为一名应用开发者(web/desktop),深入理解应用程序的安全性是最为重要的技能之一。”Veracode首席安全顾问Stephen Jensen说道,“在当今世界,有关安全问题的新闻不绝于耳,大多数是揭露数以百万计的人们的敏感信息。因此,Web应用开发者必须知道如何预防常见的漏洞,比如Cross-Site Scripting (XSS),SQL注入等。为了确保应用在创建过程中免受安全问题的恶意攻击,同时也为了保护用户潜在的敏感信息问题,这也是所有开发者应当学习的必备基础技能。”
2. 用户体验(UX)设计
“随着移动设备用户需求量的不断增加,开发者需要充分理解用户体验设计显得愈发重要。”Raster Media CEO Michael Smith说,“设计团队单独负责某款应用的用户体验的日子已经一去不复返了。开发者必须考虑互动、动画、速度以及各个APP之间的通信等问题。”
我完全赞同这一观点。用户体验设计有几大重要因素,首先,用户的期望有所上升。用户下载一款新的应用,他们想立即知道它是如何运行的。他们希望从业务应用中获取相同的体验。其次,用户有选择的余地。如果不喜欢这款应用,他们会寻找另一款代替。由于用户的期望值增加以及竞争的加剧,更为直观的界面需求比以往显得更加重要。
3. 自适应/响应式设计
谈及UX设计,Web App开发者必须建立可随处运行的应用程序。现在的问题不再是“用户如何与我的应用进行交互?”而是演变成“用户与我的应用如何在每款设备类型上进行交互?”
想要做到这一点并不容易。你必须回答以下这些问题:“智能手机上的按钮设置在哪里?你如何在小屏幕上格式化数据表?当设备从人像模式切换至风景模式会发生什么?”总之,Web开发者必须知道让Web应用适应不同屏幕大小的方法。
针对跨平台/设备,响应式设计和自适应设计主要两大方法:
响应式设计使用流体网格以及CSS3媒体查询来适应各种屏幕大小/类型上的应用。你可以通过Web找到各种响应式设计案例。例如TheNextWeb就是个典型的案例。你会发现,当你调整浏览器大小时,该网站会自动适应新的尺寸。
自适应设计根据不同的设备提供不同的HTML页面。比如,一款独立的Web应用可能需要3个独立的表示层(HTML):一个是PC端,一个是平板电脑,另一个则是智能手机。例如,在不同的设备上访问Web App,外观和行为显示的均各不相同。
那么哪一种方法最好呢?我想说它们有各有各的优势。响应式方法对于Web网页设计以及Web应用信息来说是个不错的选择;而自适应方法可更好的适用于数据驱动Web应用,尤其是包含那些数据表的应用。为什么?这是因为它让开发者能够更好的控制数据结构和样式,而不是试图去适应多种屏幕尺寸上的单个表格,自适应设计方法可让你为每款设备创建不同的表单。
4. JavaScript
开发者总会为他们选择的编程语言而争论。你无法说服一个Java程序员称赞PHP是最好的,反之亦如此,就像你也无法说服一个PHP程序员赞同Java是最好的,但在Web应用中开发者大多数会选择使用JavaScript。
“随着移动和Web桌面应用的发展,JavaScript已快速成为最为重要的计算机语言。” Coordinato创始人Ben Bakhshi表示,“不少业内人士认为利用JavaScript编码将在未来10年内显著增加。”
5. Web应用架构
在Web开发上,应用架构变得比以往更加重要。应用体系架构直接影响到应用可扩展性、灵活性,以及集成其他Web服务和应用的能力。如果开发者想要创建一款有用的、可持续性的应用,那么理应深刻掌握Web应用架构知识。
“Web应用开发者应该充分关注Web应用架构”,MRC软件开发经理Tyler Wassell说,“开发者应该了解,所开发的应用程序如何与所有系统组件进行交互,以及底层架构将如何影响诸如可移植性、可维护性、可用性等性能情况。”
6. API集成
现如今,API已发展成为Web开发一个重要的方面。从本质来讲,API让不同的Web服务之间相互通信。开发者可以通过其他应用/服务上调用数据创建应用。
SimpleCollegeRecipes网站创始人兼CEO Brendan O’Connor认为,“API集成已成为现在Web应用开发者必备的技能。API允许你从其他网站上整合内容和信息。可以说,API使人人受益,包括终端用户,API供应商以及程序员自己。”
总结:
Web应用开发正在不断演变,Web开发所具备的技能也在不断更新变化中。开发者唯有不断进取、学习新的知识才能在开发行业中站住脚。当然,想要掌握每一种Web(移动Web)技能,几乎是不可能的,大部分公司无法为员工给予Web以及移动开发方面不同的解决方案,不可能做到面面俱到。