weinre调试,如何删除localstoragee怎么删除

3444人阅读
Android(4)
五个你必须知道的javascript和web debug技术
在前端开发中,调试技术是必不可少的技能,本文将介绍五种前端开发必备的调试技术。
Weinre移动调试DOM 断点debugger断点native方法hook远程映射本地调试
在移动上面开发调试是很复杂的,所以就有了weinre。安装可以实现pc来调试手机页面,所以对于移动开发调试是很重要的哦~
http://people.apache.org/~pmuellr/weinre/docs/latest/images/weinre-demo.jpg
安装weinre
weinre可以通过npm来安装:
npm install -g weinre
安装完之后,可执行下面的命令来启动:
weinre --httpPort 8080 --boundHost -all-
这样访问自己的127.0.0.1:8080按照提示在需要调试页面中插入一段js,然后就可以调试了。操作界面类似Chrome的 DevTools,具体操作可以看下教程
通过在需要调试的页面中引入一段weinre的js,实现pc和手机的socket通信,从而实现实时调试。
如果你嫌每次都要在调试的页面引入js麻烦,可以做个书签或者chrome插件如果嫌安装麻烦,可以使用phonegap的weinre:
DOM断点是一个Firebug和chrome DevTools提供的功能,当js需要操作打了断点的DOM时,会自动暂停,类似debugger调试。
使用DOM断点
选择你要打断点的DOM节点右键选择Break on..选择断点类型
Firebug中,DOM断点可以在Script& Breakpoints里面看到chrome DevTools中,需要在Elements面板的DOM Breakpoints中看到
javascript的debugger语句
需要调试js的时候,我们可以给需要调试的地方通过debugger打断点,代码执行到断点就会暂定,这时候通过单步调试等方式就可以调试js代码
使用javascript的断点
在需要打断点的地方添加debugger:
if (waldo) {
这时候打开console面板,就可以调试了
如果你不知道怎么调试,那么尽快看下:中断点部分的教程
原生代码的hook调试
因为浏览器自己会内置一些类似window对象这些原生的js方法,当你知道原生代码的确有问题,但是你又不能跟踪调试的时候,你就可以用这个方法了。
例如我们注意到了一个DOM的属性值发生了变化,但是我们不知道是哪里的代码导致的变化,所以我们可以给DOM元素的setAttribute打个断点,代码如下:
var oldFn = Element.prototype.setA
Element.prototype.setAttribute = function (attr, value) {
if (value === &the_droids_you_are_looking_for&) {
oldFn.call(this, attr, value);
这样,当元素的属性发生了变化的时候,就会执行到断点,你就可以在断点的栈中找出调用的地方来~
这种方法不保证在所有浏览器中有效,比如ios的safari 隐私模式下,我们就不可以修改localStorage方法
远程映射本地调试
当线上某个js/css出现问题,我们可以用代理的方式,将远程的文件代理到本地来实现远程映射调试。其实除了这个功能,还可以作为抓包工具,这在移动端是很重要的。推荐Mac用charles
Proxy(),
windows用户使用fiddler()
这个就不多说了,直接上国内的几篇文章:
原文阅读(本文没有完全翻译,有所扩展):
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:65466次
积分:1051
积分:1051
排名:千里之外
原创:37篇
转载:19篇
(2)(1)(2)(3)(1)(3)(1)(3)(2)(4)(2)(5)(2)(2)(1)(2)(1)(4)(3)(4)(1)(1)(1)(1)(1)(3)说到本地存储,这玩意真是历尽千辛万苦才走到HTML5这一步,之前的历史大概如下图所示:
最早的Cookies自然是大家都知道,问题主要就是太小,大概也就4KB的样子,而且IE6只支持每个域名20个cookies,太少了。优势就是大家都支持,而且支持得还蛮好。很早以前那些禁用cookies的用户也都慢慢的不存在了,就好像以前禁用javascript的用户不存在了一样。
userData是IE的东西,垃圾。现在用的最多的是Flash吧,空间是Cookie的25倍,基本够用。再之后Google推出了Gears,虽然没有限制,但不爽的地方就是要装额外的插件(没具体研究过)。到了HTML5把这些都统一了,官方建议是每个网站5MB,非常大了,就存些字符串,足够了。比较诡异的是居然所有支持的浏览器目前都采用的5MB,尽管有一些浏览器可以让用户设置,但对于网页制作者来说,目前的形势就5MB来考虑是比较妥当的。
支持的情况如上图,IE在8.0的时候就支持了,非常出人意料。不过需要注意的是,IE、Firefox测试的时候需要把文件上传到服务器上(或者localhost),直接点开本地的HTML文件,是不行的。
首先自然是检测浏览器是否支持本地存储。在HTML5中,本地存储是一个window的属性,包括localStorage和sessionStorage,从名字应该可以很清楚的辨认二者的区别,前者是一直存在本地的,后者只是伴随着session,窗口一旦关闭就没了。二者用法完全相同,这里以localStorage为例。
1 if(window.localStorage){
alert('This browser supports localStorage');
alert('This browser does NOT support localStorage');
存储数据的方法就是直接给window.localStorage添加一个属性,例如:window.localStorage.a&或者&window.localStorage["a"]。它的读取、写、删除操作方法很简单,是以键值对的方式存在的,如下:
1 localStorage.a = 3;//设置a为"3"
2 localStorage["a"] = "sfsf";//设置a为"sfsf",覆盖上面的值
3 localStorage.setItem("b","isaac");//设置b为"isaac"
4 var a1 = localStorage["a"];//获取a的值
5 var a2 = localStorage.a;//获取a的值
6 var b = localStorage.getItem("b");//获取b的值
7 localStorage.removeItem("c");//清除c的值
这里最推荐使用的自然是getItem()和setItem(),清除键值对使用removeItem()。如果希望一次性清除所有的键值对,可以使用clear()。另外,HTML5还提供了一个key()方法,可以在不知道有哪些键值的时候使用,如下:
1 var storage = window.localS
2 function showStorage(){
for(var i=0;i&storage.i++){
//key(i)获得相应的键,再用getItem()方法获得对应的值
document.write(storage.key(i)+ " : " + storage.getItem(storage.key(i)) + "&br&");
写一个最简单的,利用本地存储的计数器:
1 var storage = window.localS
2 if (!storage.getItem("pageLoadCount")) storage.setItem("pageLoadCount",0);
3 storage.pageLoadCount = parseInt(storage.getItem("pageLoadCount")) + 1;//必须格式转换
4 document.getElementByIdx_x("count").innerHTML = storage.pageLoadC
5 showStorage();
不断刷新就能看到数字在一点点上涨,如下图所示:
需要注意的是,HTML5本地存储只能存字符串,任何格式存储的时候都会被自动转为字符串,所以读取的时候,需要自己进行类型的转换。这也就是上一段代码中parseInt必须要使用的原因。
另外,在iPhone/iPad上有时设置setItem()时会出现诡异的QUOTA_EXCEEDED_ERR错误,这时一般在setItem之前,先removeItem()就ok了。
HTML5的本地存储,还提供了一个storage事件,可以对键值对的改变进行监听,使用方法如下:
1 if(window.addEventListener){
window.addEventListener("storage",handle_storage,false);
3 }else if(window.attachEvent){
window.attachEvent("onstorage",handle_storage);
6 function handle_storage(e){
if(!e){e=window.event;}
//showStorage();
对于事件变量e,是一个StorageEvent对象,提供了一些实用的属性,可以很好的观察键值对的变化,如下表:
&Description
&The&named&key&that&was&added,&removed,&or&moddified
&The&previous&value(now&overwritten),&or&null&if&a&new&item&was&added
&The&new&value,&or&null&if&an&item&was&added
&The&page&that&called&the&method&that&triggered&this&change
这里添加两个键值对a和b,并增加一个按钮。给a设置固定的值,当点击按钮时,修改b的值:
2 &p&You have viewed this page &span id="count"&0&/span&
time(s).&/p&
3 &p&&input type="button" value="changeStorage" onClick="changeS()"/&&/p&
4 &script&
5 var storage = window.localS
6 if (!storage.getItem("pageLoadCount")) storage.setItem("pageLoadCount",0);
7 storage.pageLoadCount = parseInt(storage.getItem("pageLoadCount")) + 1;//必须格式转换
8 document.getElementByIdx_x("count").innerHTML = storage.pageLoadC
9 showStorage();
10 if(window.addEventListener){
window.addEventListener("storage",handle_storage,false);
12 }else if(window.attachEvent){
window.attachEvent("onstorage",handle_storage);
15 function handle_storage(e){
if(!e){e=window.}
showObject(e);
19 function showObject(obj){
//递归显示object
if(!obj){return;}
for(var i in obj){
if(typeof(obj[i])!="object" || obj[i]==null){
document.write(i + " : " + obj[i] + "&br/&");
document.write(i + " : object" + "&br/&");
30 storage.setItem("a",5);
31 function changeS(){
//修改一个键值,测试storage事件
if(!storage.getItem("b")){storage.setItem("b",0);}
storage.setItem('b',parseInt(storage.getItem('b'))+1);
36 function showStorage(){
//循环显示localStorage里的键值对
for(var i=0;i&storage.i++){
//key(i)获得相应的键,再用getItem()方法获得对应的值
document.write(storage.key(i)+ " : " + storage.getItem(storage.key(i)) + "&br&");
43 &/script&
44 &/body&
测试发现,目前浏览器对这个支持不太好,仅iPad和Firefox支持,而且Firefox支持得乱糟糟,e对象根本没有那些属性。iPad支持非常好,用的是e.uri(不是e.url),台式机上的Safari不行,诡异。
目前浏览器都带有很好的开发者调试功能,下面分别是Chrome和Firefox的调试工具查看LocalStorage:
另外,目前javascript使用非常多的json格式,如果希望存储在本地,可以直接调用JSON.stringify()将其转为字符串。读取出来后调用JSON.parse()将字符串转为json格式,如下所示:
1 var details = {author:"isaac","description":"fresheggs","rating":100};
2 storage.setItem("details",JSON.stringify(details));
3 details = JSON.parse(storage.getItem("details"));
JSON对象在支持localStorage的浏览器上基本都支持,需要注意的是IE8,它支持JSON,但如果添加了如下的兼容模式代码,切到IE7模式就不行了(此时依然支持localStorage,虽然显示window.localStorage是[object],而不是之前的[object&Storage],但测试发现getItem()、setItem()等均能使用)。
&meta content="IE=7" http-equiv="X-UA-Compatible"/&
阅读(...) 评论()}

我要回帖

更多关于 js localstorage 删除 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信