本来早就应该写这篇文章的,只是忙的时候忙,闲的时候懒,导致拖了这么久。
不管内置多少命令,需求总是千变万化的,这时候内置命令就不够用了,需要使用者自己编写一些命令。现在来看看怎么做。 继续阅读…
本来早就应该写这篇文章的,只是忙的时候忙,闲的时候懒,导致拖了这么久。
不管内置多少命令,需求总是千变万化的,这时候内置命令就不够用了,需要使用者自己编写一些命令。现在来看看怎么做。 继续阅读…
在移动App开发中,为了快速迭代,通常都会使用Native+Web的模式开发。具体来说就是使用Java提供接口,使用WebView控件嵌套Web页面来实现UI和交互。
在Android中,Java可以很方便的提供接口给WebView中的Js进行调用,只要以下一行代码就能搞定:
mWebView.addJavascriptInterface(new JavascriptInterface(), "custom_name");
这样,JavascriptInterface的所有声明为public的方法,都能被mWebView中的Js通过以下方式调用:
window.custom_name.xxx();//xxx为JavascriptInterface的公有方法
而Java需要调用Js时,则是通过WebView实例的loadUrl方法调用:
mWebView.loadUrl("javascript:xxx(yyy)");
这其实跟你在浏览器的地址栏敲下“javascript:alert(1)”的原理是一样的。
一切看起来都是那么的美好,只是……
当Java需要传递大量字符串给Js时,URL就力不从心了。另外,从URL执行的Js,在页面没加载完成时,是有可能导致页面出现undefined错误(因为要执行的那个方法可能还没有声明呢),会引发各种奇形怪状的错误。
最近搞Android项目的时候,遇到一个比较蛋疼的需求,需要从Client App调用系统浏览器打开一个页面,进行杂七杂八的一些交互之后,返回到App。如何打开浏览器和如何返回App这里就不说了,有兴趣的童鞋可私下交流。
之所以说这个需求蛋疼,是因为Android有个物理返回键啊……返回键啊……键啊……啊……
用户按下返回键后,预期应该跟点击页面上的返回键一样——返回App。然而这个返回键的被按下的时候网页完全不知道啊(onbeforeunload不算),找不到直接的办法去监听,愁死我们这全苦逼程序员鸟~
虽然啊不能直接监听,曲线救国的办法,还是有滴。 继续阅读…
Java Web中经常需要用到文件上传,比较有名的组件就是Commons-Fileupload、COS、SmartUpload(几年前的记忆了,不知道还是不是……)。
前段时间做个Android需求,需要从客户端POST图片到Server(用了Commons-Fileupload),结果它死活解析不出文件来。
组装成的表单内容如下:
--abcdefghijklmn Content-Disposition: form-data; filename="name" Content-Type: content/unknown abc.jpg --abcdefghijklmn Content-Disposition: form-data; filename="yyy.jpg" Content-Type: content/unknown some data --abcdefghijklmn
很正常的一个表单,POST到另外个Sever(用了别的文件上传组件),却能正常解析。因此问题一定是出现在Fileupload的表单解析上。于是跟做CGI的童鞋一起研究了下,把直接用Web页面POST的表单内容拿过来比较,总算发现问题了。看下面高亮的地方: 继续阅读…
最近做一个项目,改动到了两个页面(A,B):在A页面(aa.example.com/a.html)往localStorage写一个key,然后在稍候的B页面(bb.example.com/b.html)读出来。结果是写的时候成功了,在A页面也读出来了,跑到B页面,localStorage却是空的!
别急,待俺掐指一算……嗯,子域不同,localStorage应该也是不一样的。在A页面的逻辑完成的时候,跳转到bb.example.com/a.html 进行设置key的话,写key和读取key都是同一个域了。
结果……啊,我要崩溃,还是读不出来!但是t它(A,B)的上一个版本是可以的,为虾米呢?
接上篇:Compiler@NodeJS(一) – Web项目编译脚本
直接切入主题吧。
PS:打个广告先,Compiler@NodeJS,Web开发、居家旅行、杀人越货之必备良药!
比较深入的用过linux的童鞋,一定记得这个“|”。它的使用方式是这样子的:cmd_a | cmd_b,意思是执行cmd_a 并且把cmd_a输出的结果,作为cmd_b的输入参数,传给cmd_b并执行它。例如我在shell中执行 top | grep node,就可以把进程名字包含node的进程的相关信息都找出来。如下:
PS:top是实时显示进程状态的命令;grep是文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
如上,管道可以把多个命令串联起来,只要这些命令都有输入输出,就能无限串联(理论上的……) !哇哈哈哈~~
话说上次melody同学分享了canvas绘图的相关内容,大家都对createRadialGradient的输入参数和结果蛮感兴趣的。因此我也把它的各种取值都试了一遍,发现了一些有趣的东西,共享之。
首先说下createRadialGradient,createRadialGradient是canvas创建发射渐变的一个方法,它的形参是这样子的:
createLinearGradient(xStart, yStart, radiusStart, xEnd, yEnd, radiusEnd)
前三个参数是起始圆(cycle1)的x、y、半径,后三个是终点圆(cycle2)的x、y、半径。其它介绍就不多说了,可以看看w3school的介绍。
| 参数 | 描述 |
|---|---|
| xStart, yStart | 开始圆的圆心的坐标。 |
| radiusStart | 开始圆的半径。 |
| xEnd, yEnd | 结束圆的圆心的坐标。 |
| radiusEnd | 结束圆的半径。 |
于是我们在想,cycle1 > cycle2会怎么样了?cycle1==cycle2有会有什么结果呢? 继续阅读…