since.2006  

工欲善其事,必先利其器。上次没专门配置开发环境直接在firefox扩展目录修改代码做某个操作时自动清空了扩展目录,欲哭无泪~幸好用了IDE在编辑代码从历史版本中找了回来。
最近要修改个功能为了不碰到上次那样的问题,还是专门配个开发环境吧。

1.先为开发环境创建个自己的Profile,这样随便怎么动都不会影响到正常使用。
Mac OS 在命令行下执行:"/Applications/Firefox.app/Contents/MacOS/firefox-bin -p"
Windows 在快捷方式后加 -p 参数。
上面会打开一个用户配置文件管理窗口,创建一个新的配置文件,创建完成后,在profile目录下创建一个extensions的文件夹,开发的扩展就放在这个目录下。

2.打开firefox,输入about:config修改以下参数
// 把chrome文件的错误输出到错误控制台
javascript.options.showInConsole = true
//禁用 XUL 缓存,使得对窗口和对话框的修改不需要重新加载 XUL 文件
nglayout.debug.disable_xul_cache = true 
// 可以在脚本里用dump来输出调试信息到终端,如dump("test")
browser.dom.window.dump.enabled = true
// 严格的脚本错误报告。如果不设置这个,一些脚本错误将不会被输出到错误控制台。
javascript.options.strict = true
// 使错误控制台里显示更多的和安装和更新有关的错误信息
extensions.logging.enabled = true
3.每次修改内容后用ant自动复制文件到firefox扩展目录
<?xml version="1.0" encoding="utf-8"?>
<project name="ToMeFirefox" default="复制文件至扩展目录" basedir="../">
    <!-- 应用的文件目录 -->
    <property name="app" value="app"/>
    <!-- 应用在firefox扩展目录下的文件夹名 -->
    <!-- 这个扩展目录就是在第1步自定义的profile文件夹下 -->
    <property name="extDirName" value="E:\workspace\FirefoxProfiles\extensions\App@since2006.com"/>

    <target name="复制文件至扩展目录">
        <delete dir="${extDirName}"/>
        <mkdir dir="${extDirName}"/>
        <copy todir="${extDirName}">
            <fileset dir="${app}">
            </fileset>
        </copy>
    </target>

</project>

4.重启firefox测试效果

5.反复重启的话,可以创建个快捷方式在第1步的参数-p后加上Profile的名字每次打开默认使用这个Profile

如:
firefox.exe -p dev -console

 

Posted by hee at 11:07 AM | Permalink | 评论(0)

原来在firefox2以下版本中写XMLHttpRequest读取时,同步和异步请求都是onreadystatechange来设置回调函数,可是到firefox3中,同步请求通过设置onreadystatechange来判断数据是否读取貌似完成没有作用,换回下面方法就没问题了。

在 firefox2 以下版本中,xmlhttp同步/异步读取数据,可以使用下面方法来监测数据是否读取完毕:

transport.onreadystatechange = function () {    
    if (transport.readyState == 4) {    
        if (transport.status == 200) {    
            // do sth    
        } else {    
            // do sth    
        }    
    }    
}

在 firefox3 中测试时,xmlhttp同步读取数据,设置onreadystatechange不会产生回调。
需要在send方法后这样读取:

transport.send(null);    
        
if (transport.status == 200) {    
    // do sth    
} else {    
    // do sth    
}
Posted by hee at 19:06 PM | Permalink | 评论(1)
Component returned failure code: 0x804b00a
[nsIDOMHTMLFormElement.submit]

在Firefox下动态创建form并提交到其它页面时,有时会产生这个异常。
在IE下则没有这个问题。
比如这个:http://www.webdeveloper.com/forum/showthread.php?t=92006

在写这个博客后台的HTML编辑器时,也碰到了这个问题。

0x804b000a is NS_ERROR_MALFORMED_URI. Check whether using an absolute URI for action makes a difference.

解决方法:
看看form的action地址用的是不是相对路径,如果是相对路径,改为http://youdomain.com/action.php形式的完整URL试试。

PS:IMG标签在特定情况下也会出现这种问题。


Posted by hee at 14:04 PM | Permalink | 评论(0)

IE6的使命终于快结束了,MS再过几天(2月12日)起将强制推送IE7浏览器。如果不想更新到IE7,可以使用MS官方提供的IE7BlockerToolkit

安装后,打开CMD进入安装目录,敲入IE70Blocker.cmd /B即可屏蔽自动更新IE7,换成/U参数则允许自动更新IE7。

对于IE6的结束,我更希望Firefox3的到来。Firefox3中终于支持模态对话框了,在2中虽然支持模态对话框,但需要特殊设置一些权限。

mozilla developer center上,已经可以看到FF3中支持window.showModalDialog(),window.dialogArguments。

最要命的是在FF2中模拟模态对话框会产生某些RP问题,比如FCKEditor(2.5.1)工具栏的帮助按钮在FF中模拟了模态对话框,但在我机器上运行时,多点几次父窗口,再关闭子窗口,CPU占用率就90%以上。

自己写个window.open,以dialog方式弹出再关闭,CPU占用率也有90%以上。简单页面没有测试,但就算弹出的页面复杂一点,CPU也不要一直飙到90%以上。

Firefox3快来吧!

Posted by hee at 21:02 PM | Permalink | 评论(0)

之前的留言回复使用tiny_mec做所见即所得编辑器,速度感觉太慢了,于是自己想写个简单的UBB编辑器玩玩,碰到一些问题记这里:

IE和Firefox下取消事件冒泡

function showEmot() {    
    var evt =  || event;    
    if(evt.preventDefault) {    
        // Firefox    
        evt.preventDefault();    
        evt.stopPropagation();    
    } else {    
        // IE    
        evt.cancelBubble=true;    
        evt.returnValue = false;    
    }    
}

textarea下将一段内容替换鼠标所选文字或插入到当前光标位置

function append($val) {    
    // sEditorId textarea的ID    
    var eObj = document.getElementById(sEditorId);    
    // ie    
    if (eObj.createTextRange) {    
        eObj.focus();    
        document.selection.createRange().duplicate().text = $val;    
    } else {    
        // firefox    
        var iStart = eObj.selectionStart;    
        var iEnd = eObj.selectionEnd;    
        eObj.value = eObj.value.substr(0, iStart) + $val + eObj.value.substr(iEnd, eObj.value.length);    
        eObj.focus();    
    }    
}  
Posted by hee at 23:03 PM | Permalink | 评论(0)

字符串形式的xml数据(和html合在一起),在IE和FF下都可以用一般的dom标签定位到过去取值。
但在FF中有一个BUG,假如值有时,取出来的值会是:[CDATA[数据]]。

<XMP id=target> 
<root><node><![CDATA[数据]]></node></root> 
</XMP>
function getXmlFromString($str) {
// 简单用这种方法判断一下是否是IE
    if (document.all) {
        var xmlDom = new ActiveXObject("Microsoft.XMLDOM");
        xmlDom.loadXML($str);
        return xmlDom;
    } else {
        return new DOMParser().parseFromString($str, "text/xml");
    }
} // 此时就可以用像处理xml一样的方法取值了 var doc = getXmlFromString(document.getElementById("target").innerHTML); alert(doc.childNodes[0].childNodes[0].childNodes[0].nodeValue);
Posted by hee at 16:01 PM | Permalink | 评论(0)