存档

文章标签 ‘firefox’

Performancing扩展也不满足需要

2006年3月30日 robertbao 没有评论

试了Firefox的一个扩展Performancing,做得非常漂亮…

开启BlogAPI接口,选择XML-RPC Engine为Blogger类型,在Performancing中输入XML-RPC地址:http://www.robertbao.com/xmlrpc.php,用户名/密码,很容易地就可以和本站连接,并且可以获得分类目录。

基本的功能都有了,编辑、发表、保存等等,而且这种工具最大的好处就是“一次写贴,处处发表”,通过自设不同的接口,可以发表同一篇文章到你的各个不同的Blog上。其它好处就不多说了,我不满意的是:

1、还是不支持本机路径图片上传;

2、不支持文章中未提到的链接发送trackback。

不知道我说的对不对,或者有哪位高人用过这东东,给个指点…

分类: WORK 标签:

本站CSS还是有点小问题

2006年3月30日 robertbao 2 条评论

Sai,上一篇文章中那个链接,在IE下显示良好,会自动断行,在Firefox下怎么就要在一行里显示完呢?把整个左边栏扩得很大…

本站的CSS还是有问题啊…现在也没时间研究这个了…这不同浏览器的适应性真是有够烦人…

分类: PASTIME 标签: ,

我使用的Firefox插件

2006年1月4日 robertbao 没有评论

firefox_logo.png

这里介绍一下我使用的Firefox插件,一来跟大家分享,二来给自己做个备忘:

使用Firefox插件时有几点注意一下,能大大加快你的Firefox速度:

  1. 对你没用的插件不要装,用的少的暂时停用,长期不用的就卸载。记住:Firefox越精干,它就越快。
  2. 如果Firefox实在慢得不行,十有八九是因为装的插件或主题的原因。此时用安全模式启动(Windows菜单的Firefox程序组里有这一项,或者用启动命令 –safe-mode),逐一卸载插件,看看哪个插件被卸载情况会有好转。

其他的一点小建议:

在Firefox地址栏中输入about:config

1、加入一个boolean类型的键:config.trim_on_minimize,并设置为true,可以在最小化时自动释放内存;

2、修改键browser.sessionhistory.max_total_viewers,把值修改为3或更小,这是页面前进/后退中保存的页面数,默认是-1(无限)。


#更新记录

日期 版本 说明
2006-01-04 0.1 初稿
2007-03-06 0.2 加入小建议,加入Performancing插件
分类: WORK 标签:

Monkeygrease的一个示例

2005年11月10日 robertbao 1 条评论

上面说了Monkeygrease的基本用法,这里有一个示例,用于表示可变大小的文本域。

Javascript代码如下,保存为resizeabletextareas.js:

var resizeTa={loaded:null,TAlength:0,init:function(){
if(resizeTa.loaded){
return;
}else{
resizeTa.loaded=true;
var _1=document.getElementsByTagName("body")[0];
if(_1){
window.addEventListener("load",resizeTa.pageload,true);
}
}
},pageload:function(_2){
resizeTa.doc=_2.originalTarget;
resizeTa.TA=resizeTa.doc.getElementsByTagName("TEXTAREA");
resizeTa.TAlength=resizeTa.TA.length;
if(resizeTa.TAlength==0){
return;
}else{
resizeTa.rootElem=resizeTa.doc.getElementsByTagName("HTML")[0];
var i=resizeTa.TAlength;
while(i–){
resizeTa.newdiv("5","1","gripH_",i,"w");
resizeTa.newdiv("1","5","gripV_",i,"n");
resizeTa.newdiv("10","10","gripX_",i,"se");
}
resizeTa.newdiv("0","0","showCursor","","w");
CursorDiv=resizeTa.doc.getElementById("showCursor");
CursorDiv.removeEventListener("mousedown",resizeTa.activate,true);
CursorDiv.style.left="0px";
CursorDiv.style.top="0px";
resizeTa.posdivs();
window.addEventListener("resize",resizeTa.posdivs,true);
}
},newdiv:function(w,h,id,nr,cu){
var _9=resizeTa.doc.createElement("div");
_9.setAttribute("ID",id+nr);
_9.setAttribute("STYLE","position:absolute;width:"+w+"px;height:"+h+"px;cursor:"+cu+"-resize");
_9.addEventListener("mousedown",resizeTa.activate,true);
resizeTa.rootElem.appendChild(_9);
},getposition:function(i){
var _b=resizeTa.TA[i];
var _c=_b.offsetLeft;
while(_b.offsetParent){
_c+=_b.offsetParent.offsetLeft;
_b=_b.offsetParent;
}
_b=resizeTa.TA[i];
var _d=_b.offsetTop;
while(_b.offsetParent){
_d+=_b.offsetParent.offsetTop;
_b=_b.offsetParent;
}
return [_c,_d];
},posdivs:function(){
var k=resizeTa.TAlength;
while(k–){
curPos=resizeTa.getposition(k);
resizeTa.doc.getElementById("gripH_"+k).style.left=curPos[0]+resizeTa.TA[k].offsetWidth-3+"px";
resizeTa.doc.getElementById("gripH_"+k).style.top=curPos[1]+"px";
resizeTa.doc.getElementById("gripH_"+k).style.height=resizeTa.TA[k].offsetHeight-8+"px";
resizeTa.doc.getElementById("gripV_"+k).style.left=curPos[0]+"px";
resizeTa.doc.getElementById("gripV_"+k).style.top=curPos[1]+resizeTa.TA[k].offsetHeight-3+"px";
resizeTa.doc.getElementById("gripV_"+k).style.width=resizeTa.TA[k].offsetWidth-8+"px";
resizeTa.doc.getElementById("gripX_"+k).style.left=curPos[0]+resizeTa.TA[k].offsetWidth-8+"px";
resizeTa.doc.getElementById("gripX_"+k).style.top=curPos[1]+resizeTa.TA[k].offsetHeight-8+"px";
}
},activate:function(e){
resizeTa.doc=e.target.ownerDocument;
resizeTa.TA=resizeTa.doc.getElementsByTagName("TEXTAREA");
CursorDiv=resizeTa.doc.getElementById("showCursor");
resizeTa.TAlength=resizeTa.TA.length;
var _10=e.target.getAttribute("ID").split("_");
curTarget=_10[0];
curTA_Nr=parseInt(_10[1]);
resizeTa.doc.addEventListener("mouseup",resizeTa.deactivate,true);
switch(curTarget){
case "gripH":
resizeTa.doc.addEventListener("mousemove",resizeTa.resizeta_h,true);
break;
case "gripV":
resizeTa.doc.addEventListener("mousemove",resizeTa.resizeta_v,true);
break;
case "gripX":
resizeTa.doc.addEventListener("mousemove",resizeTa.resizeta_x,true);
break;
}
CursorDiv.style.width=resizeTa.rootElem.offsetWidth+"px";
CursorDiv.style.height=resizeTa.rootElem.offsetHeight+"px";
CursorDiv.style.cursor=e.target.style.cursor;
},deactivate:function(){
resizeTa.doc.removeEventListener("mouseup",resizeTa.deactivate,true);
switch(curTarget){
case "gripH":
resizeTa.doc.removeEventListener("mousemove",resizeTa.resizeta_h,true);
break;
case "gripV":
resizeTa.doc.removeEventListener("mousemove",resizeTa.resizeta_v,true);
break;
case "gripX":
resizeTa.doc.removeEventListener("mousemove",resizeTa.resizeta_x,true);
break;
}
CursorDiv.style.width="0px";
CursorDiv.style.height="0px";
resizeTa.posdivs();
},resizeta_h:function(e){
curPos=resizeTa.getposition(curTA_Nr);
resizeTa.TA[curTA_Nr].style.width=e.pageX-curPos[0]+"px";
},resizeta_v:function(e){
curPos=resizeTa.getposition(curTA_Nr);
resizeTa.TA[curTA_Nr].style.height=e.pageY-curPos[1]+"px";
},resizeta_x:function(e){
curPos=resizeTa.getposition(curTA_Nr);
resizeTa.TA[curTA_Nr].style.width=e.pageX-curPos[0]+2+"px";
resizeTa.TA[curTA_Nr].style.height=e.pageY-curPos[1]+2+"px";
}};
window.addEventListener("load",resizeTa.init,false);

在monkeygrease.xml中加入如下规则:

<rule enabled="true" name="Resizeable Textarea" url-pattern="\/.*" insert-at="head-end">
    <![CDATA[
    <script type="text/javascript" src="/yourScriptPath/resizeabletextareas.js"></script>
    ]]>
</rule>

这句话<script type="text/javascript" src="/yourScriptPath/resizeabletextareas.js"></script>就自动加入到客户端获得的html代码的head区域的后部。

这段JS只在Firefox下有效,实际上这篇文章跟Monkeygrease相关性不大,主要就是展示这段代码。

分类: WORK 标签: ,

用Monkeygrease进行Server端的代码注入

2005年11月10日 robertbao 2 条评论

最近看到了一些Monkeygrease的东西,将Greasemonkey的两个词颠倒,倒是不错的命名方法,可以利用一下Greasemonkey的知名度。

实际上Monkeygrease本来就号称是服务器端的Greasemonkey(在 Firefox 浏览器端执行用户Javascript代码来修改增强web页面),它们的目的都是相同的,不过实现方式不一样,Greasemonkey是基于用户的、客户端的,Monkeygrease是基于代理、服务器端的。

既然在服务器端采用这种方式,面向客户端的都是一样的效果,没有了Greasemonkey的基于用户的可定制性,为什么不直接在服务器端修改本身的站点代码呢?关于这个问题,它的网站上有回答:对于许多web应用来说,有些不容易改进、有些不方便定制、有些看不到源代码、有些很复杂需要专业知识才能定制。

Monkeygrease是一个简单的servlet filter,它将Javascript,CSS或其它的元素插入到html页面上,就像在html代码中作AOP注入。使用Monkeygrease可以增强web的某些方面:

  • 改变web页面的观感
  • 加入DHTML/AJAX效果
  • 文本框加入WYSIWYG
  • 整合进上下文相关的其它网站内容
  • 增强页面的可用性

对于如何开始Monkeygrease应用,下面做个简单的说明:

1、下载Monkeygrease

2、将monkeygrease.jar放入WEB-INF/lib目录下。

3、修改web.xml,加入下面的过滤器:

<filter>
<filter-name>Monkeygrease</filter-name>
<filter-class>
org.manalang.monkeygrease.MonkeygreaseFilter
</filter-class>
<init-param>
<param-name>confReloadCheckInterval</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>commentsOn</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>logLevel</param-name>
<param-value>2</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Monkeygrease</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

4、在monkeygrease.xml文件中定义规则。规则中url-pattern属性支持正则表达式insert-at属性定义注入区域,如head-begin、head-end、body-begin、body-end;规则的节点内容通过CDATA表示,Javascript、CSS等代码就插入在这里,例如:

<![CDATA[
<script type="text/javascript" language="javascript">
<!--
window.onload = function() {
  alert('Hello World!!!');
};
-->
</script>
]]>

   下面是一个monkeygrease.xml的示例:

<?xml version="1.0" encoding="UTF-8"?>
<mg:monkeygrease xmlns:mg="http://monkeygrease.org"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://monkeygrease.org http://monkeygrease.org/monkeygrease.xsd ">
<rule enabled="true" name="Sample rule 1" url-pattern="/.*" insert-at="head-begin">
<![CDATA[
<!-- Whatever you insert here gets injected as the first item in the <head> section -->
]]>
</rule>
<rule enabled="true" name="Sample rule 2" url-pattern="/.*" insert-at="head-end">
<![CDATA[
<!-- Whatever you insert here gets injected as the last item in the <head> section -->
]]>
</rule>
<rule enabled="true" name="Sample rule 3" url-pattern="/.*" insert-at="body-begin">
<![CDATA[
<!-- Whatever you insert here gets injected as the first item in the <body> section -->
]]>
</rule>
<rule enabled="true" name="Sample rule 4" url-pattern="/.*" insert-at="body-end">
<![CDATA[
<!-- Whatever you insert here gets injected as the last item in the <body> section -->
]]>
</rule>
</mg:monkeygrease>
</xml>

5、将monkeygrease.xml放入WEB-INF目录下。

6、初始的客户端浏览的html代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
This is a test
</body>
</html>

monkeygrease规则应用注入内容后的html代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<!– Whatever you insert here gets injected as the first item in the <head> section –>
<title>Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<!– Whatever you insert here gets injected as the last item in the <head> section –>
</head>
<body>
<!– Whatever you insert here gets injected as the first item in the <body> section –>
This is a test
<!– Whatever you insert here gets injected as the last item in the <body> section –>
</body>
</html>

完了,就是这么简单。不过看起来实用价值不大。

分类: WORK 标签: ,