共 35 页, « 1 [2] 3 4 5 » ... 最后一页 »
GreaseMonkey这个插件大家都早已熟悉了。最近我遇到一个问题:需要让页面在调用完某个函数之后自动执行我的函数。 其实这个并不难,写个函数替换原有的函数即可:
function hook() {
var f = unsafeWindow.foo; // 保存旧函数
unsafeWindow.foo = function() { // 定义新函数
alert("Hello!"); // 先执行我们的处理
f(); // 再执行旧函数
}
}
然后加载到页面上:
setTimeout(hook, 1000);
这样,页面再执行foo函数时,就会先执行我们的alert("Hello!")了。
不过这个函数还有很大的问题。比如,原有函数的参数不能正确传给foo,返回值无法取出来,无法应用到对象中的方法,通用性不好等。 下面来一个个解决。
阅读全文 »xsltproc的常用参数
xsltproc有许多实用的参数。有两种方法指定参数。一是在执行xsltproc时通过--stringparam参数来设置,如:
xsltproc --stringparam html.stylesheet "style.css" -o index.html chunk.xsl index.xml
另外一种方法就是写到XSL文件中,格式如下:
<xsl:param name="chunker.output.encoding" select="'UTF-8'"/>
常用参数有:
- html.stylesheet,设置生成的网页所用的CSS样式表。
- section.autolabel,设置为1可以对章节标题自动编号
- section.label.includes.component.label,默认情况下节的编号中不包括章的编号,如“第二章->1->1.1”,将此项设置为1,即可让节编号中包含章编号,如“第二章->2.1->2.1.1”。
- section.autolabel.max.depth,设置章节标题自动编号的深度
- chunker.output.encoding,设置chunk输出时使用的字符编码
使用catalog
catalog有很多作用,最重要的就是
- 可以给引用的xsl设置缩略名称
- 可以指定DTD在本地的位置
下面是个catalog.xml的例子:
<?xml version="1.0"?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<!-- define public DTD -->
<public
publicId="-//OASIS//DTD DocBook XML V4.1.2//EN"
uri="file:///usr/share/sgml/docbook/xml-dtd-4.1.2-1.0-30.1/docbookx.dtd" />
<!-- XSL location -->
<uri
name="html/docbook.xsl"
uri="/usr/share/sgml/docbook/xsl-stylesheets-1.69.1-5.1/html/docbook.xsl" />
<uri
name="html/chunk.xsl"
uri="/usr/share/sgml/docbook/xsl-stylesheets-1.69.1-5.1/html/chunk.xsl" />
</catalog>
这里首先将 "-//OASIS//DTD DocBook XML V4.1.2//EN" 这个id定义到了本地, 这样在xsl中引用这个id所指的DTD时,xsltproc就会使用这里指定的本地DTD,而不用去Internet上去获取。
接下来定义了两个xsl别名:html/docbook.xsl指向 /usr/share/..../docbook.xsl, html/chunk.xsl 指向 /usr/share/..../chunk.xsl。 这样在我们自定义的xsl文件中要包含上述xsl时,只需这样写:
<xsl:import href="html/chunk.xsl"/>
而不用写成繁琐的
<xsl:import href="/usr/share/sgml/docbook/xsl-stylesheets-1.69.1-5.1/html/chunk.xsl"/>
这样做的好处是,可以将样式表的安装路径统一在catalog.xml中规定,不用在每个xsl中重复书写完整路径了。 以后万一要升级样式表,也只需修改catalog.xml中的定义即可,不用去每个xsl中修改。
那么如何使用catalog呢?只需将它设置到环境变量 XML_CATALOG_FILES 中即可。 或者也可以这样:
XML_CATALOG_FILES=catalog.xml xsltproc -o index.html chunk.xsl index.xml
通过把Content-Type设置为application/octet-stream, 可以把动态生成的内容当作文件来下载,相信这个大家都会。 那么用Content-Disposition设置下载的文件名, 这个也有不少人知道吧。 基本上,下载程序都是这么写的:
<?php
$filename = "document.txt";
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $filename);
print "Hello!";
?>
这样用浏览器打开之后,就可以下载document.doc。
但是,如果$filename是UTF-8编码的,有些浏览器就无法正常处理了。 比如把上面那个程序稍稍改一下:
<?php
$filename = "中文 文件名.txt";
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $filename);
print "Hello!";
?>
把程序保存成UTF-8编码再访问,IE6下载的文件名就会乱码。 FF3下下载的文件名就只有“中文”两个字。Opera 9下一切正常。
阅读全文 »这一系列的文章参考了这个专题。 我从其中找出一些比较实用的,用中文总结一下,并加上一些我的想法。 懂日文的同学就直接去原文看吧。
阅读全文 »最近想用VC写一个抓图程序。好久没用VC了,绝大部分知识都忘得一干二净了。 经过查阅无数资料之后终于得出一个差不多像样的程序来。 在这里说说基本思路吧。代码就不上了。
阅读全文 »GNU diff有很多功能平时我们不常用到,但若知道,在急需时还真能派得上用场。
最常用的功能莫过于生成patch文件了:
diff -urN old/ new/ > mysoft.patch
参数 -u 表示使用 unified 格式,-r 表示比较目录,-N 表示将不存在的文件当作空文件处理, 这样新添加的文件也会出现在patch文件中。
然后在需要应用patch的地方使用下述命令即可:
patch -p0 < mysoft.patch
diff的 -y 命令(长格式为 --side-by-side)可以将屏幕分成左右两部分,来比较两个文件之间的差异。 许多图形化的比较工具都有这个功能,但如果只能使用命令行,这个参数就相当有用了。 如果要改变左右各部分的宽度,可以通过 -W (--width)参数来指定。 (这条技巧来自于bkブログ,谢谢)
此外,--strip-trailing-cr 参数可以去除行尾的换行,这样DOS格式和Unix格式的文件互相比较时, 就不至于因为换行符不一致而出现大量的差异。
在Perl的各种文件测试运算符中,最有用的运算符之一就是 -C 了。 它返回的是文件的ctime到程序启动的那一时刻经过的天数。 如果不是整数天,返回值就带有小数。
这个运算符经常用来检测文件是否过期,比如判断文件距离上次修改是否超过了3天, 如果超过就将其删除。但是,你是否真正理解 -C 的工作原理呢?
阅读全文 »很多人都不知道需求分析应该怎么做,我也不知道。 而《代码大全2》上这个checklist能帮助你判断需求分析是不是做好了。
来源:代码大全2,电子工业出版社,P42。
阅读全文 »今天开始阅读《代码大全2》。这本书已经在我的书架上放了整整一年半的时间,现在下决心要将它读完。
今天阅读的是第1章~第3章的一部分。主要介绍的是软件构建的基础。
何谓软件构建?通常,软件构建是指详细设计、编码、单元测试这几个过程, 它占据了整个软件开发过程的30%~60%的时间。小型项目可能会省掉需求分析,时间紧迫的项目可能会省掉测试, 但构建的这几个过程是必不可少的。
阅读全文 »1. 脱引用(dereference)并不是只能用在引用上,返回引用的函数也能使用。如:
sub foo { my $a = 10; return \$a; }
print ${foo()}; # 返回10
print "${foo()}"; # 甚至在字符串替换中也能用!
2. 两个相邻的下标之间可以省去 -> 。如:
print $sue{children}->[1]->{age};
print $sue{children}[1]{age}; # 与上一条语句相同
3. 将字符串当作变量名的行为叫做符号引用:
$a = "x"; $x = 10; print $$a # 输出10
注意符号引用只能引用到全局变量,用my声明过的就引用不到了。使用use strict可以禁止符号引用。
阅读全文 »