作者归档:trick

Mac支付宝插件风波

1、前言

首先我喜欢看一些创业的书,很多书里都会有马云的身影,马云也算是对我有一定的影响,从而我对淘宝也产生了一定的好感。但是关于这次插件事情,我对阿里产生了一些排斥的心里作用。我并不想吐槽淘宝,也不是吐槽马云,阿里不是万达,整个阿里并不是马云想干啥就干啥,所以这些事情也不可能说是马云的一句之作,我看见网上很多人因为这个事情在吐槽马云,我都为马云兄背黑锅这件事情感到蛋疼。仁者见仁智者见智吧!

2、可疑进程

无意中看到一篇文章在说Mac上支付宝插件有点异常,我查看了自己的进程,发现确实存在一个可疑的“AlipayDispatcherService”进程,同时这个进程会监控浏览器的配置文件,通过kill结束这个进程后发现“AlipayDispatcherService”进程会再次启动,我找出了以下两个相关的阿里服务:

 

  • com.alipay.refresher.plist
  • com.alipay.DispatcherService.plist

发现“com.alipay.DispatcherService.plist”服务调用“com.alipay.refresher.plist”服务不断重启“AlipayDispatcherService”,理清楚调用顺序过后,关闭这个进程相对简单了,首先禁用两个服务:

sudo launchctl unload /Library/LaunchDaemons/com.alipay.DispatcherService.plist

sudo launchctl unload ~/Library/LaunchAgents/com.alipay.refresher.plist

然后执行命令结束掉“AlipayDispatcherService”进程:

kill -9 AlipayDispatcherService

3、找出藏身之地

我查看了支付宝插件包里面的“preinstall”文件,列出了一些目录安装文件的目录,可以通过查看是否存在相关文件进一步确认并删除:

  • ~/Library/Alipay
  • /Library/Application Support/Alipay
  • /Library/LaunchDaemons/com.alipay.DispatcherService.plist
  • ~/Library/LaunchAgents/com.alipay.refresher.plist
  • ~/Library/Internet Plug-Ins/ali*(npali*).plugin

4、正确姿势安装

  1. 首先到官方下载名为wkaliedit.dmg的插件包
  2. 然后载入过后提取installer.pkg文件,解压installer.pkg包提取output.pkg包
  3. 右键显示包内容打开output.pkg包,解压Payload包(此包为gzip格式,如果不能直接解压,请在终端下解压(tar zxvf Payload)),得到alipay包
  4. 右键显示包内容打开alipay包,依次进入Contents-Resources,找到其中两个zip包,aliedit.zip和npalicdo.zip
  5. 解压两个包,并把解压的两个文件“aliedit.plugin”、“npalicdo.plugin”放到”~/Library/Internet Plug-Ins文件下
  6. 重启浏览器

HTML5跨文档消息传递

HTML5定义了一些javascript API,其中有一个就是跨文档消息传递(cross-document-messaging简称XDM)。 现在XDM已经作为一个规范独立了出来,名字为:Web Messaging   项目地址为:http://dev.w3.org/html5/postmsg/ XMD核心就是postMessage()方法,这个方法接受两个参数一个是需要传送的字符串,第二个是接收方的域的字符串。 第二个参数可以控制一定的安全性,如果把第二个参数设置为”*”,那么就是所有的域都可以接收此消息。 而相对于postMessage()方法的其他页面指的就是包含在当前页面中的元素或者是由当前窗口弹出的窗口。如下列中首先创建一个iframe内嵌框架,获取iframe元素window对象的引用(所有支持XDM的浏览器都支持iframe的contentWindow属性),然后进行消息传递。

 1 var newIframe = document.createElement("iframe");
 2 
 3 newIframe.src = "http://www.baidu.com/";
 4 
 5 newIframe.width = "500px";
 6 
 7 newIframe.height = "500px";
 8 
 9 document.body.appendChild(newIframe);
10 
11 var iframeWindow = newIframe.contentWindow;
12 
13 iframeWindow.postMessage("this is post mess", "http://www.baidu.com");     //传递信息成功

 

传递过后会触发接收方window对象的message事件,在message事件对象中包含三个息息相关重要的属性:

继续阅读

HTMLImageElement类型的简便利用

这个是我在复习书籍的时候看见的,当时一个同学想通过页面发送请求,但是数据量不是太大,所以用的get方式,但是页面用表单提交请求的话会让页面进行跳转,当时我在网上查了一点资料,发现基本上都是通过ajax请求,无奈现在还没有学习到ajax这一部分,于是翻书,正好看到这里了。所以后面的代码改了过后,一句话解决了问题。

1 var chunk = 数据; var url = "http://www.baidu.com"; document.createElement("img").src = url + "&" + chunk;

在Javascript中对于图片格式进行了实现类型为HTMLImageElement继承自HTMLElement,这个类型拥有img标签公有的特性名对应的属性,可以通过这些属性进行设置。 HTMLImageElement类型是一个动态的类型,也就是说不添加进DOM树中还是能够加载,这个过程我把它叫做”预加载”,如下:

1 var nimg = document.createElement("img"); nimg.src = "http://www.baidu.com/img/baidu_jgylogo3.gif"; 
//当执行到这一条语句的时候,此时它就会预加载,即使你没有添加进DOM树中,没有添加进DOM树只是你看不见。

 

如何来验证这个问题?我通过添加load事件来监听是否加载完成,如果加载完成则弹窗,这里我把顺序分成在监听前设置src属性,和监听后设置src属性。 第一种方式:先设置src属性后监听

1 var nimg = document.createElement("img"); nimg.src = "http://www.baidu.com/img/baidu_jgylogo3.gif"; 
2  //这里并没有弹窗 
3 
4 nimg.addEventListener("load",function(){alert(1)},false); document.body.appendChild(nimg); 
5  //即使我添加进DOM树还是没有弹窗

 

第二种方式:先监听后设置src属性

1 var nimg = document.createElement("img"); 
2 
3 nimg.addEventListener("load",function(){alert(1)},false);
4 
5 nimg.src = "http://www.baidu.com/img/baidu_jgylogo3.gif";  
6 //执行到这里的时候会弹窗,说明监听到事件。

 

HTML表单脚本

在HTML中,表单由

标签构成。在javascript中,是由HTMLFormElement类型构成,这个类型继承自HTMLElement类型。

HTMLFormElement类型具有以下单独的属性和方法:

  • acceptCharset: 服务器能够处理的字符集(HTML中的accept-charset)
  • action:请求的URL地址(HTML中的action)
  • method:请求的http类型,是为POST还是为GET(HTML中的method)
  • elements:表单里的所有组件的集合,类型为HTMLCollection
  • length:表单里所有组件的数量
  • enctype:请求编码的类型(HTML中的enctype)
  • name:表单的名称(HTML中表单的name)
  • submit():用编程方式提交表单
  • reset():将表单里所有可填写的组件内容置空
  • target:用于发送请求和接收响应的窗口名字(HTML中的target)

document.form属性

可以通过document.form来获取整个页面的form表单,返回一个集合,可以通过数值的索引活着name值来查找特定的表单:

var oneform = document.form[0];

var twoform = document.form[twoform];

elements属性

每个表单都会有一个elements属性,里面包含了表单内所有组件的集合,它是一个有序的列表,里面包含了按顺序的组件索引,可以通过数值索引和name值来访问里面的组件。

var oneform = document.form[0];

var oneinput = oneform.elements[0];

submit()、reset()

可以通过编程方式提交表单,在表单的引用上调用submit()方法可以提交表单,但是不触发submit事件。相对于reset()方法,可以通过调用执行置空,但是它会触发reset事件。 继续阅读

树莓派实现TimeMachine以及samba服务

最近一段时间感觉用移动硬盘备份Mac电脑很不方便,因为要把移动硬盘拿出来,还要插上电脑备份,看了一下AirPort,但是价钱太贵,况且只能用于Mac备份并不能用于其他的Samba服务等,感觉不太划算,于是打算自己做一个TimeMacheine以及samba服务,TimeMacheine服务主要用于Mac备份,而samba用于局域网内的电脑上的一些文件存放。

准备工作:

1、树莓派
2、移动硬盘
3、5V电源适配器以及连接线
4、无线USB网卡或者有线
5、SD卡(新版本的是TF卡)
6、操作系统,关于操作系统,你可以到raspberry官方网站进行下载并通过win32diskimager软件进行写入。

在这里我自己的设备信息为:

1、树莓派2代
2、西数移动硬盘2TB自带电源
3、5V电源适配器以及连接线
4、有线网络
5、SD卡16GB金士顿
6、raspbian操作系统

查看自己的移动硬盘是否加载,lsblk结果:

 

继续阅读