﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Sealyu-随笔分类-Javascript</title><link>http://www.blogjava.net/sealyu/category/45313.html</link><description>--- The devil's in the Details</description><language>zh-cn</language><lastBuildDate>Tue, 22 Jun 2010 23:23:06 GMT</lastBuildDate><pubDate>Tue, 22 Jun 2010 23:23:06 GMT</pubDate><ttl>60</ttl><item><title>js获取光标位置（转）</title><link>http://www.blogjava.net/sealyu/archive/2010/06/22/324220.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Tue, 22 Jun 2010 15:17:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/06/22/324220.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/324220.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/06/22/324220.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/324220.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/324220.html</trackback:ping><description><![CDATA[/**<br />
* 获取光标所在的字符位置<br />
* @param obj 要处理的控件, 支持文本域和输入框<br />
* @author
hotleave<br />
*/<br />
<br />
<textarea id="runcode0" class="codeTextarea" cols="60" rows="15">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=GBK"
/&gt;
&lt;title&gt;js获取光标位置&lt;/title&gt;
&lt;script type="text/javascript"&gt;
/**
* 获取光标所在的字符位置
* @param obj 要处理的控件, 支持文本域和输入框
* @author hotleave
*/
function getPosition(obj){
//alert(obj.tagName);
var result = 0;
if(obj.selectionStart){ //非IE浏览器
result = obj.selectionStart
}else{ //IE
var rng;
if(obj.tagName == "TEXTAREA"){ //如果是文本域
rng = event.srcElement.createTextRange();
rng.moveToPoint(event.x,event.y);
}else{ //输入框
rng = document.selection.createRange();
}
rng.moveStart("character",-event.srcElement.value.length);
result = rng.text.length;
}
return result;
}
function getValue(obj){
var pos = getPosition(obj);
//alert(pos);
alert(obj.value.substr(0,pos)+" [这里是添加的内容]
"+obj.value.substr(pos,obj.value.length));
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;input type="text" value="你好,Amethyst!" onmouseup="getValue(this)"
style="display:block"&gt;
&lt;textarea rows="6" cols="60" onmouseup="getValue(this)"&gt;Amethyst,
你好.&lt;/textarea&gt;
&lt;/body&gt;
&lt;/html&gt;
</textarea><br />
<input id="0" onclick="runCode(this.id)" value="运行代码" type="button" />&nbsp;&nbsp;<button id="0" onclick="doCopy(this.id)">复制代码</button>&nbsp;&nbsp;<label id="0" onclick="saveCode(this.id)" class="saveLabel">另存代码</label>&nbsp;&nbsp;提示：您
可以先修改部分代码再运行<br />
<br />
<br />
<textarea id="runcode1" class="codeTextarea" cols="60" rows="15">&lt;html&gt;
&lt;head&gt;
&lt;title&gt;js获取光标位置&lt;/title&gt;
&lt;style&gt;
body,td{
font-family: verdana, arial, helvetica, sans-serif;
font-size: 12px;
}
&lt;/style&gt;
&lt;script type="text/javascript"&gt;
var start=0;
var end=0;
function add(){
var textBox = document.getElementById("ta");
var pre = textBox.value.substr(0, start);
var post = textBox.value.substr(end);
textBox.value = pre +
document.getElementById("inputtext").value + post;
}
function savePos(textBox){
//如果是Firefox(1.5)的话，方法很简单
if(typeof(textBox.selectionStart) == "number"){
start = textBox.selectionStart;
end = textBox.selectionEnd;
}
//下面是IE(6.0)的方法，麻烦得很，还要计算上'"n'
else if(document.selection){
var range = document.selection.createRange();
if(range.parentElement().id == textBox.id){
// create a selection of the whole textarea
var range_all = document.body.createTextRange();
range_all.moveToElementText(textBox);
//两个range，一个是已经选择的text(range)，一个是整个textarea(range_all)
//range_all.compareEndPoints()比较两个端点，如果range_all比range更往左(further to the
left)，则                 //返回小于0的值，则range_all往右移一点，直到两个range的start相同。
// calculate selection start point by moving beginning
of range_all to beginning of range
for (start=0;
range_all.compareEndPoints("StartToStart", range) &lt; 0; start++)
range_all.moveStart('character', 1);
// get number of line breaks from textarea start to
selection start and add them to start
// 计算一下"n
for (var i = 0; i &lt;= start; i ++){
if (textBox.value.charAt(i) == '"n')
start++;
}
// create a selection of the whole textarea
var range_all = document.body.createTextRange();
range_all.moveToElementText(textBox);
// calculate selection end point by moving beginning
of range_all to end of range
for (end = 0; range_all.compareEndPoints('StartToEnd',
range) &lt; 0; end ++)
range_all.moveStart('character', 1);
// get number of line breaks from textarea start
to selection end and add them to end
for (var i = 0; i &lt;= end; i ++){
if (textBox.value.charAt(i) == '"n')
end ++;
}
}
}
document.getElementById("start").value = start;
document.getElementById("end").value = end;
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;form action="a.cgi"&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tr&gt;
&lt;td&gt;start: &lt;input type="text" id="start"
size="3"/&gt;&lt;/td&gt;
&lt;td&gt;end: &lt;input type="text" id="end"
size="3"/&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="2"&gt;
&lt;textarea id="ta" onKeydown="savePos(this)"
onKeyup="this.value=this.value.replace(/["，]/g,',');savePos(this);"
onmousedown="savePos(this)"
onmouseup="savePos(this)"
onfocus="savePos(this)"
rows="14" cols="50"&gt;&lt;/textarea&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;input type="text" id="inputtext" /&gt;&lt;/td&gt;
&lt;td&gt;&lt;input type="button" onClick="add()" value="Add
Text"/&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;
</textarea><br />
<input id="1" onclick="runCode(this.id)" value="运行代码" type="button" />&nbsp;&nbsp;<button id="1" onclick="doCopy(this.id)">复制代码</button>&nbsp;&nbsp;<label id="1" onclick="saveCode(this.id)" class="saveLabel">另存代码</label>&nbsp;&nbsp;提示：您
可以先修改部分代码再运行
<img src ="http://www.blogjava.net/sealyu/aggbug/324220.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-06-22 23:17 <a href="http://www.blogjava.net/sealyu/archive/2010/06/22/324220.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> FCKeditor: Resolve “FCKeditorAPI is not defined” issue</title><link>http://www.blogjava.net/sealyu/archive/2010/06/22/324103.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Mon, 21 Jun 2010 16:12:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/06/22/324103.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/324103.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/06/22/324103.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/324103.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/324103.html</trackback:ping><description><![CDATA[<p>FCKeditor offers a complete JavaScript API so you can interact with
it once the editor is loaded and running.</p>
<p>Once loaded, the editor registers a global object called <strong>FCKeditorAPI</strong>.
This object offers the entry point to interact with any editor instance
placed in a page.</p>
<p><strong>NOTE</strong>: The <strong>FCKeditorAPI</strong> object will
not be available during the page load. You need to wait for the editor
to be loaded to use it.</p>
<p>Often, I see that people complain about a JavaScript error,
&#8220;FCKeditorAPI is not defined&#8221;, when they try to use FCKeditorAPI.</p>
<p><strong>For example</strong></p>
<p>The following code will throw a JavaScript error when you try to use
the FCKeditorAPI -</p>
<p><img title="FCKeditor Error" src="http://farm4.static.flickr.com/3394/3630927126_5f1c6f01da_o.jpg" alt="" height="100" width="709" /></p>
<p>You can resolve the JavaScript error by adding a line of code (Line #
4) as shown below -</p>
<p><img title="FCKeditor Error Resolved" src="http://farm4.static.flickr.com/3644/3630112661_87f0639b9b_o.jpg" alt="" height="115" width="790" /></p>
<p>Hope this helps!</p>
<img src ="http://www.blogjava.net/sealyu/aggbug/324103.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-06-22 00:12 <a href="http://www.blogjava.net/sealyu/archive/2010/06/22/324103.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IE和Safari中重命名html元素需要注意的问题</title><link>http://www.blogjava.net/sealyu/archive/2010/06/11/323288.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Thu, 10 Jun 2010 16:10:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/06/11/323288.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/323288.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/06/11/323288.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/323288.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/323288.html</trackback:ping><description><![CDATA[Author： Sealyu&nbsp; 2010-6-10<br />
<br />
这两天在处理浏览器兼容的时候碰到很多问题，特别是在重新命名checkbox的时候，在IE和Safari中都碰到一些怪异的问题。<br />
<ol>
    <li>IE中不能在运行时重命名元素。</li>
    <br />
</ol>
&nbsp;&nbsp;&nbsp;&nbsp; 按照微软的解释，运行时是无法重命名的：<br />
&nbsp; &nbsp;&nbsp; After some digging, I found an
explanation in the <a href="http://msdn.microsoft.com/en-us/library/ms533050%28VS.85%29.aspx">MSDN
DHTML
reference</a>, on the page describing the <a href="http://msdn.microsoft.com/en-us/library/ms534184%28VS.85%29.aspx">NAME
Attribute</a>.
<blockquote>
<p>The NAME attribute cannot be set at run time on elements
dynamically created with the createElement method. To create an element
with a name attribute, include the attribute and value when using the
createElement method.</p>
<p>后来找到国外的一篇帖子，找到一个解决方法，那就是使用<a title="MSDN mergeAttributes Documentation" href="http://msdn.microsoft.com/en-us/library/ms536614%28VS.85%29.aspx">mergeAttributes</a> 方法，模拟新建一个只有name不同的元素，并和之前的元素合并，这样就能达到重命名的效果了。代码如下：</p>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;setElementName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(el,&nbsp;newName)&nbsp;{<br />
<br />
el&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">typeof</span><span style="color: #000000;">&nbsp;el&nbsp;</span><span style="color: #000000;">===</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">string</span><span style="color: #000000;">"</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">?</span><span style="color: #000000;">&nbsp;document.getElementById(el)&nbsp;:&nbsp;el;<br />
<br />
el.name&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;newName;<br />
<br />
</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">/</span><span style="color: #000000;">MSIE&nbsp;(\d</span><span style="color: #000000;">+</span><span style="color: #000000;">\.\d</span><span style="color: #000000;">+</span><span style="color: #000000;">);</span><span style="color: #000000;">/</span><span style="color: #000000;">.test(navigator.userAgent))&nbsp;{&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Internet&nbsp;Explorer&nbsp;test&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;"><br />
el.mergeAttributes(document.createElement(</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;INPUT&nbsp;name='</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;newName&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">'/&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">),&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);<br />
<br />
}<br />
<br />
};</span></div>
</blockquote>
<br />
2. Safari中，如果用getElementsByName得到一个checkbox组，那么重命名的时
候，无法用for循环全部重命名<br />
例如：<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;checkBoxes&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;document.getElementsByName(</span><span style="color: #000000;">"</span><span style="color: #000000;">testCheckbox</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;checkBoxesSize&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;checkBoxes.length;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;checkBoxesSize&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">--</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(checkBoxes[i]&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">!</span><span style="color: #000000;">checkBoxes[i].checked)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setElementName(checkBoxes[i],</span><span style="color: #000000;">"</span><span style="color: #000000;">testCheckbox-new</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
这种情况在IE和Firefox下面都没有问题，全部的checkbox都会被成功的重命名。<br />
但是在Safari下面，无法实现这个目的。经过调试发现，在Safari中，如果使用getElementsByName来得到这个checkbox组，那么在重命名的时候，如果使用for循环来依次进行，那么每重命名一个checkbox，safari将自动将这个元素从for循环中移除，这样这个循环在进行到一半的时候就会报错：checkBoxes[i][null]不是一个元素。<br />
纠结了一段时间，本来打算想一个算法来解决这个问题，后来突然想到另外一个简单一点的方法：<br />
使用getElementsByTagName方法来得到所有元素，并从中筛选出对应的checkbox，如果符合条件，再重命名。这种情况下，因为使用的tag类型来获得的数组，所以在for循环中，在重命名checkbox后，safari就不会自动的移除对应的元素。具体代码如下：<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;elementlist&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;document.getElementsByTagName(</span><span style="color: #000000;">"</span><span style="color: #000000;">input</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;elementSize&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;elementlist.length;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">elementSize;i</span><span style="color: #000000;">++</span><span style="color: #000000;">){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;curElement&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;elementlist[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(curElement.type&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">'checkbox'&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;curElement.name&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;'testCheckbox'&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">!</span><span style="color: #000000;">curElement.checked){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curElement.name</span><span style="color: #000000;">=</span><span style="color: #000000;">'testCheckbox</span><span style="color: #000000;">-</span><span style="color: #0000ff;">new</span><span style="color: #000000;">';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span></div>
<br />
<img src ="http://www.blogjava.net/sealyu/aggbug/323288.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-06-11 00:10 <a href="http://www.blogjava.net/sealyu/archive/2010/06/11/323288.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>prototype.js 的 Ajax.updater 的 用法(转)</title><link>http://www.blogjava.net/sealyu/archive/2010/06/10/323285.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Thu, 10 Jun 2010 15:40:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/06/10/323285.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/323285.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/06/10/323285.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/323285.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/323285.html</trackback:ping><description><![CDATA[ajax.updater 方法有3个参数: ajax.updater<font face="Courier New">(container,
url, options)<br />
分别表示 1.控件id；2.请求的url；3.具体如下（可选）：</font><br />
<table summary="options 参数对象" border="1">
    <colgroup>
    <col>
    <col>
    <col>
    <col></colgroup>
    <thead>
        <tr>
            <th align="center">属性</th>
            <th align="center">类型</th>
            <th align="center">Default</th>
            <th align="center">描述</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td><tt>method</tt></td>
            <td><tt>Array</tt></td>
            <td><tt>'post'</tt></td>
            <td>HTTP 请求方式。get or post</td>
        </tr>
        <tr>
            <td><tt>parameters</tt></td>
            <td><tt>String</tt></td>
            <td><tt>''</tt></td>
            <td>在HTTP请求中传入的url格式的值列表。</td>
        </tr>
        <tr>
            <td><tt>asynchronous</tt></td>
            <td><tt>Boolean</tt></td>
            <td><tt>true</tt></td>
            <td>指定是否做异步 AJAX 请求。</td>
        </tr>
        <tr>
            <td><tt>postBody</tt></td>
            <td><tt>String</tt></td>
            <td><tt>undefined</tt></td>
            <td>在HTTP POST的情况下，传入请求体中的内容。</td>
        </tr>
        <tr>
            <td><tt>requestHeaders</tt></td>
            <td><tt>Array</tt></td>
            <td><tt>undefined</tt></td>
            <td>和请求一起被传入的HTTP头部列表， 这个列表必须含有偶数个项目， 任何奇数项目是自定义的头部的名称，
            接下来的偶数项目使这个头部项目的字符串值。 例子:<tt>['my-header1', 'this is the
            value', 'my-other-header', 'another value']</tt></td>
        </tr>
        <tr>
            <td><tt>onXXXXXXXX</tt></td>
            <td><tt>Function(XMLHttpRequest)</tt></td>
            <td><tt>undefined</tt></td>
            <td>在AJAX请求中，当相应的事件/状态形成的时候调用的自定义方法。 例如 <tt>var myOpts =
            {onComplete: showResponse, onLoaded: registerLoaded};</tt>.
            这个方法将被传入一个参数， 这个参数是携带AJAX操作的 <tt>XMLHttpRequest</tt>对象。</td>
        </tr>
        <tr>
            <td><tt>onSuccess</tt></td>
            <td><tt>Function(XMLHttpRequest)</tt></td>
            <td><tt>undefined</tt></td>
            <td>当AJAX请求成功完成的时候调用的自定义方法。 这个方法将被传入一个参数， 这个参数是携带AJAX操作的 <tt>XMLHttpRequest</tt>对象。</td>
        </tr>
        <tr>
            <td><tt>onFailure</tt></td>
            <td><tt>Function(XMLHttpRequest)</tt></td>
            <td><tt>undefined</tt></td>
            <td>当AJAX请求完成但出现错误的时候调用的自定义方法。 这个方法将被传入一个参数， 这个参数是携带AJAX操作的 <tt>XMLHttpRequest</tt>对象。</td>
        </tr>
        <tr>
            <td><tt>insertion</tt></td>
            <td><tt>Function(Object, String)</tt></td>
            <td><tt>null</tt></td>
            <td>为了把返回的文本注入到一个元素中而执行的方法。 这个方法将被传入两个参数，要被更新的对象并且只应用于 <tt><a title="2.16.&nbsp;Ajax.Updater 类" href="https://compdoc2cn.dev.java.net/prototype/html/prototype.js.cn.html?sid=4E7FHu#ajax_updater_reference">Ajax.Updater</a>
            </tt>的响应文本 。</td>
        </tr>
        <tr>
            <td><tt>evalScripts</tt></td>
            <td><tt>Boolean</tt></td>
            <td><tt>undefined, false</tt></td>
            <td>决定当响应到达的时候是否执行其中的脚本块，只在 <a title="2.16.&nbsp;Ajax.Updater 类" href="https://compdoc2cn.dev.java.net/prototype/html/prototype.js.cn.html?sid=4E7FHu#ajax_updater_reference"><tt>Ajax.Updater</tt> </a>对象中应用。</td>
        </tr>
        <tr>
            <td><tt>decay</tt></td>
            <td><tt>Number</tt></td>
            <td><tt>undefined, 1</tt></td>
            <td>决定当最后一次响应和前一次响应相同时在 <a title="2.17.&nbsp;Ajax.PeriodicalUpdater 类" href="https://compdoc2cn.dev.java.net/prototype/html/prototype.js.cn.html?sid=4E7FHu#ajax_periodical_updater"><tt>Ajax.PeriodicalUpdater</tt> </a>对象中的减漫访问的次数，
            例如，如果设为2，后来的刷新和之前的结果一样， 这个对象将等待2个设定的时间间隔进行下一次刷新， 如果又一次一样， 那么将等待4次，等等。
            不设定这个只，或者设置为1，将避免访问频率变慢。</td>
        </tr>
    </tbody>
</table>
<br />
<div><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;getContents()&nbsp;<br />
{&nbsp;<br />
</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;request_url&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #000000;">"</span><span style="color: #000000;">test1.html</span><span style="color: #000000;">"</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;需要获取内容的url&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;request_pars&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #000000;">''</span><span style="color: #000000;">;</span><span style="color: #008000;">//</span><span style="color: #008000;">请求参数&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;myAjax&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Ajax.Updater(</span><span style="color: #000000;">'</span><span style="color: #000000;">result</span><span style="color: #000000;">'</span><span style="color: #000000;">,&nbsp;request_url,{&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;将request_url返回内容绑定到id为result的容器中&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">get</span><span style="color: #000000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">HTTP请求的方法,get&nbsp;or&nbsp;post&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">parameters&nbsp;:&nbsp;request_pars,&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">请求参数&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">onFailure&nbsp;&nbsp;:&nbsp;reportError,&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">失败的时候调用&nbsp;reportError&nbsp;函数&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">onLoading&nbsp;&nbsp;:&nbsp;loading,&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">正在获得内容的时候&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">onComplete&nbsp;:&nbsp;done&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">内容获取完毕的时候&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">});&nbsp;<br />
}&nbsp;<br />
<br />
</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;loading()&nbsp;<br />
{&nbsp;<br />
$(</span><span style="color: #000000;">'</span><span style="color: #000000;">loading</span><span style="color: #000000;">'</span><span style="color: #000000;">).style.display&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #000000;">'</span><span style="color: #000000;">block</span><span style="color: #000000;">'</span><span style="color: #000000;">;&nbsp;<br />
}&nbsp;<br />
<br />
</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;done()&nbsp;<br />
{&nbsp;<br />
$(</span><span style="color: #000000;">'</span><span style="color: #000000;">loading</span><span style="color: #000000;">'</span><span style="color: #000000;">).style.display&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #000000;">'</span><span style="color: #000000;">none</span><span style="color: #000000;">'</span><span style="color: #000000;">;&nbsp;<br />
}&nbsp;<br />
<br />
</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;reportError(request)&nbsp;<br />
{&nbsp;<br />
alert(</span><span style="color: #000000;">'</span><span style="color: #000000;">Sorry.&nbsp;There&nbsp;was&nbsp;an&nbsp;error.</span><span style="color: #000000;">'</span><span style="color: #000000;">);&nbsp;<br />
}&nbsp;</span></div>
Ajax.Updater
为我们提供加载文档时候的三种状态,
onComplete,onLoading,onFailure.我们可以自定义一个函数分别相应这三种不同的状态。<br />
<font face="Courier New">下面的例子用到了success</font> (一切OK的时候才被用到) ，和它同等地位的属性还有一个<font face="Courier New">failure</font> (有地方出问题的时候被用到) 这里没用到。出错时在 <tt>onFailure</tt> 处调用 <tt>reportError</tt>
方法。<br />
<div><span style="color: #000000;">&lt;</span><span style="color: #000000;">script</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;getHTML()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;url&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #000000;">'</span><span style="color: #000000;">http://yourserver/app/getSomeHTML</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;pars&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #000000;">'</span><span style="color: #000000;">someParameter=ABC</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;myAjax&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Ajax.Updater(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{success:&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">placeholder</span><span style="color: #000000;">'</span><span style="color: #000000;">},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{method:&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">get</span><span style="color: #000000;">'</span><span style="color: #000000;">,&nbsp;parameters:&nbsp;pars,&nbsp;onFailure:&nbsp;reportError});<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;reportError(request)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000;">'</span><span style="color: #000000;">Sorry.&nbsp;There&nbsp;was&nbsp;an&nbsp;error.</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">/</span><span style="color: #000000;">script&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">input&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #000000;">button&nbsp;value</span><span style="color: #000000;">=</span><span style="color: #000000;">GetHtml&nbsp;onclick</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">getHTML()</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">div&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">placeholder</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;&lt;</span><span style="color: #000000;">/</span><span style="color: #000000;">div&gt;</span></div>
<img src ="http://www.blogjava.net/sealyu/aggbug/323285.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-06-10 23:40 <a href="http://www.blogjava.net/sealyu/archive/2010/06/10/323285.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Detecting Internet Explorer More Effectively</title><link>http://www.blogjava.net/sealyu/archive/2010/06/09/323114.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Tue, 08 Jun 2010 20:35:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/06/09/323114.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/323114.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/06/09/323114.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/323114.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/323114.html</trackback:ping><description><![CDATA[<p>This
topic demonstrates how to detect current and future versions of Windows
Internet Explorer more effectively.</p>
<p>This topic contains the
following sections.</p>
<ul>
    <li><a href="http://msdn.microsoft.com/en-us/library/ms537509%28VS.85%29.aspx#Intro">Introduction</a></li>
    <li><a href="http://msdn.microsoft.com/en-us/library/ms537509%28VS.85%29.aspx#ParsingUA">Parsing
    the User-Agent String</a></li>
    <li><a href="http://msdn.microsoft.com/en-us/library/ms537509%28VS.85%29.aspx#UsingCCs">Using
    Conditional Comments</a></li>
    <li><a href="http://msdn.microsoft.com/en-us/library/ms537509%28VS.85%29.aspx#DetectFtr">Detecting
    Features</a></li>
    <li><a href="http://msdn.microsoft.com/en-us/library/ms537509%28VS.85%29.aspx#UsingHBC">Using
    the ASP.NET HttpBrowserCapabilities Object</a></li>
    <li><a href="http://msdn.microsoft.com/en-us/library/ms537509%28VS.85%29.aspx#Alternate">Alternatives
    to Browser Detection</a></li>
    <li><a href="http://msdn.microsoft.com/en-us/library/ms537509%28VS.85%29.aspx#Summary">Summary</a></li>
</ul>
<h2>Introduction</h2>
<p>Many Web designers use browser
detection techniques to ensure that their sites display properly when
viewed with specific browsers. Some browser detection techniques
encounter problems when viewed with later versions of the browser
they're tailored for. For example, many Web designers used Cascading
Style Sheets (CSS) rules that relied on the implementation of CSS in
Microsoft Internet Explorer 6 to detect that version of the browser.
When Internet Explorer 7 provided additional support for the CSS, Level 2
(CSS2) standard, many of these rules (also known as "CSS hacks") failed
to detect the new version of the browser. As a result, sites that
relied on these rules no longer displayed as intended. When using
browser detection techniques, use techniques that support current and
future versions of the browser you're targeting.</p>
<p>This topic
examines four different ways to detect Internet Explorer and also
provides a brief look at alternatives to browser detection. Advantages
of each technique are reviewed and suggestions are offered for effective
use.  In addition, examples demonstrate techniques that support current
and future versions of Internet Explorer.</p>
<h2>Parsing
the User-Agent String</h2>
<p>The most common way to detect Internet
Explorer is to use client-side scripting to parse the <a href="http://msdn.microsoft.com/en-us/library/ms537503%28v=VS.85%29.aspx">user-agent
string</a> and extract the version number from the version token.  The
following example shows the preferred way to do this with JavaScript.</p>
<div xmlns="">
<div>
<div>
<div><a title="Copy to clipboard." href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode0');">Copy</a></div>
</div>
<div id="CodeSnippetContainerCode0" class="LW_CodeSnippetContainerCode">
<div style="color: Black;">
<pre>function getInternetExplorerVersion()<br />
<br />
// Returns the version of Internet Explorer or a -1<br />
<br />
// (indicating the use of another browser).<br />
<br />
{<br />
<br />
var rv = -1; // Return value assumes failure.<br />
<br />
if (navigator.appName == 'Microsoft Internet Explorer')<br />
<br />
{<br />
<br />
var ua = navigator.userAgent;<br />
<br />
var re  = new RegExp("MSIE ([0-9]{1,}[".0-9]{0,})");<br />
<br />
if (re.exec(ua) != null)<br />
<br />
rv = parseFloat( RegExp.$1 );<br />
<br />
}<br />
<br />
return rv;<br />
<br />
}<br />
<br />
function checkVersion()<br />
<br />
{<br />
<br />
var msg = "You're not using Internet Explorer.";<br />
<br />
var ver = getInternetExplorerVersion();<br />
<br />
<br />
<br />
if ( ver &gt; -1 )<br />
<br />
{<br />
<br />
if ( ver &gt;= 8.0 ) <br />
<br />
msg = "You're using a recent copy of Internet Explorer."<br />
<br />
else<br />
<br />
msg = "You should upgrade your copy of Internet Explorer.";<br />
<br />
}<br />
<br />
alert( msg );<br />
<br />
}<br />
<br />
</pre>
</div>
</div>
</div>
</div>
<p>As you review this example, please note
the following:</p>
<ul>
    <li>
    <p>A regular expression extracts the version
    number from the user-agent version token.  Regular expressions let you
    specify optional conditions to match, so that you can match a larger
    number of version tokens, not just those that match a strict set of
    conditions.</p>
    </li>
    <li>
    <p>The version number extracted from the version
    token is formally converted to a numeric value.  Care must be taken
    because pre-release versions of Internet Explorer typically add letters
    to the version token. For example, the version token for pre-release
    versions of Internet Explorer 7 was "MSIE 7.0b."</p>
    </li>
    <li>
    <p>The
    checkVersion() function verifies that the browser is version 8.0 or
    later. This ensures that the welcome message is displayed for those
    using newer versions of the browser.</p>
    </li>
</ul>
<p>This example
properly detects most versions of Internet Explorer, but only if
scripting is enabled. However, the user-agent string is dynamic; it can
be changed by the end user, by browser extensions, and by operating
system updates. As a result, there's no guarantee that the user-agent
string accurately reflects the browser being used. The next sections
show techniques that may be more effective alternatives.</p>
<div><strong>
Note</strong>&nbsp;&nbsp;It is not recommended that you block access to content
based on the user-agent string of the browser. If you do have to offer
different content to different versions of the browser due to improved
capabilities, you want to ensure that future versions of the browser are
not blocked. Serving content based solely on the user-agent string is
often an unreliable way to detect the full capabilities of the browser.</div>
<p>For
more information about the user-agent string and Internet Explorer's
user-agent tokens, see <a href="http://msdn.microsoft.com/en-us/library/ms537503%28v=VS.85%29.aspx">Understanding
User-Agent Strings</a>.</p>
<h2>Using Conditional
Comments</h2>
<p>If you are specifically interested in Internet Explorer,
conditional comments might be a more appropriate choice.  The following
example shows an effective way to use conditional comments to display
custom content.</p>
<div xmlns="">
<div>
<div>
<div><a title="Copy to clipboard." href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode1');">Copy</a></div>
</div>
<div id="CodeSnippetContainerCode1" class="LW_CodeSnippetContainerCode">
<div style="color: Black;">
<pre>&lt;!--[if gte IE 8]&gt;<br />
<br />
&lt;p&gt;You're using a recent version of Internet Explorer.&lt;/p&gt;<br />
<br />
&lt;![endif]--&gt;<br />
<br />
<br />
<br />
&lt;!--[if lt IE 7]&gt;<br />
<br />
&lt;p&gt;Hm. You should upgrade your copy of Internet Explorer.&lt;/p&gt;<br />
<br />
&lt;![endif]--&gt;<br />
<br />
<br />
<br />
&lt;![if !IE]&gt;<br />
<br />
&lt;p&gt;You're not using Internet Explorer.&lt;/p&gt;<br />
<br />
&lt;![endif]&gt;<br />
<br />
</pre>
</div>
</div>
</div>
</div>
<p>Like the earlier JavaScript example,
this example makes sure the current version is greater than or equal to a
specified version number.  This ensures that the content designed for
the current version of the browser is properly displayed in a future
version.</p>
<p>This example carefully combines downlevel-revealed and
downlevel-hidden conditional comments to ensure that each message
appears only for the intended browsers.</p>
<p>Because conditional
comments do not rely on JavaScript, they are effective even if the user
has disabled scripting. Unlike the user-agent string, conditional
comments are typically updated when the browser is upgraded.  This makes
them more reliable than user-agent strings. However, because no other
browser currently supports conditional comments, they are limited to
Internet Explorer. Depending on your needs, this may be an advantage or a
disadvantage.</p>
<p>For more information about conditional comments,
see <a href="http://msdn.microsoft.com/en-us/library/ms537512%28v=VS.85%29.aspx">About
Conditional Comments</a>.</p>
<h2>Detecting
Features</h2>
<p>For many Web sites, detecting a browser's features is
the preferred form of browser detection because it allow the Web
developer to focus on the general capabilities of a browser, rather than
the specific details of each browser release. The following example
demonstrates a simple form of feature detection.</p>
<div xmlns="">
<div>
<div>
<div><a title="Copy to clipboard." href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode2');">Copy</a></div>
</div>
<div id="CodeSnippetContainerCode2" class="LW_CodeSnippetContainerCode">
<div style="color: Black;">
<pre>if (XMLHttpRequest)<br />
<br />
{<br />
<br />
// This browser implements this feature. <br />
<br />
}<br />
<br />
</pre>
</div>
</div>
</div>
</div>
<p>Feature detection tends to support a
broader range of browsers. In addition, should a browser implement the
feature you're interested in, your content will be delivered without
requiring changes to your browser detection technique. As a result,
techniques that focus on features tend to require less maintenance than
techniques that rely on environmental factors, such as the user-agent
string. In addition, they tend to work across a wider variety of browser
devices, including screen readers, mobile devices, and so on.</p>
<p>Use
care when creating or using browser detection techniques that attempt
to detect a browser based on unsupported functionality. If a future
version of the browser implements the missing feature, it's entirely
possible your site may not display as intended.</p>
<h2>Using
the ASP.NET HttpBrowserCapabilities Object</h2>
<p>ASP.NET developers
can use the <a href="http://msdn.microsoft.com/en-us/library/system.web.httpbrowsercapabilities%28VS.85%29.aspx" target="_top">HttpBrowserCapabilities</a> object to detect and respond
to almost any browser.  In addition, alternate content is not sent to
the end-user's browser.  The following example shows how to detect
Internet Explorer from an ASP.NET application using C#.</p>
<div xmlns="">
<div>
<div>
<div><a title="Copy to clipboard." href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode3');">Copy</a></div>
</div>
<div id="CodeSnippetContainerCode3" class="LW_CodeSnippetContainerCode">
<div style="color: Black;">
<pre>private float getInternetExplorerVersion()<br />
<br />
{<br />
<br />
// Returns the version of Internet Explorer or a -1<br />
<br />
// (indicating the use of another browser).<br />
<br />
float rv = -1;<br />
<br />
System.Web.HttpBrowserCapabilities browser = Request.Browser;<br />
<br />
if (browser.Browser == "IE")<br />
<br />
rv = (float)(browser.MajorVersion + browser.MinorVersion);<br />
<br />
return rv;<br />
<br />
}<br />
<br />
<br />
<br />
private void Page_Load(object sender, System.EventArgs e)<br />
<br />
{<br />
<br />
string msg;<br />
<br />
double ver = getInternetExplorerVersion();<br />
<br />
if (ver &gt; 0.0)<br />
<br />
{<br />
<br />
if (ver &gt;= 7.0) <br />
<br />
msg = "You're using a recent version of Internet Explorer.";<br />
<br />
else<br />
<br />
msg = "You should upgrade your copy of Internet Explorer.";<br />
<br />
} <br />
<br />
else<br />
<br />
msg = "You're not using Internet Explorer.";<br />
<br />
<br />
<br />
Label1.Text = msg;<br />
<br />
}<br />
<br />
</pre>
</div>
</div>
</div>
</div>
<p>Because the <strong>HttpBrowserCapabilities</strong>
object parses the user-agent string for you, you can use the <a href="http://msdn.microsoft.com/en-us/library/system.web.configuration.httpcapabilitiesbase.majorversion%28v=VS.85%29.aspx">MajorVersion</a>
and <a href="http://msdn.microsoft.com/en-us/library/system.web.configuration.httpcapabilitiesbase.minorversion%28v=VS.85%29.aspx">MinorVersion</a>
properties to determine the current version of the browser.  Unlike the
JavaScript examples, these properties are numeric; <strong>MajorVersion</strong>
returns an integer value, and <strong>MinorVersion</strong> returns a
double value.  Depending on the language used to implement your ASP.NET
application, however, you might still have to typecast these property
values to the data type you're using. To illustrate, the C# example
converts <strong>MajorValue</strong> to the floating point value
returned by the function.</p>
<p>For more information about the <strong>HttpBrowserCapabilities</strong>
object, see <a href="http://support.microsoft.com/kb/311281" target="_top">HOW TO: Determine the Browser Version in ASP.NET</a> or <a href="http://www.dotnetjunkies.com/Tutorial/5608CD69-140B-4FD9-B30C-89DC156AA0CC.dcik" target="_top">Browser Sniffing in ASP.NET</a>&nbsp;<img id="leave-site" alt="World Wide Web link" src="http://i.msdn.microsoft.com/Hash/030c41d9079671d09a62d8e2c1db6973.gif" xmlns="" class="cl_IC131792" />.</p>
<h2>Alternatives
to Browser Detection</h2>
<p>If you use browser detection because
Internet Explorer doesn't appear to support a particular feature, an
alternate approach may be more effective.  Before implementing new (or
revising existing) browser detection, it may be worthwhile to consider
one of the following approaches to solve the underlying problem.</p>
<ul>
    <li>
    <p>Internet
    Explorer allows Web developers to choose between various document
    compatibility modes that affect the way the browser interprets and
    displays content. If you are not seeing the results you expect, a
    different document compatibility mode may provide the results you seek.
    For more information, see <a href="http://msdn.microsoft.com/en-us/library/cc288325%28v=VS.85%29.aspx">Defining
    Document Compatibility</a>.</p>
    <p>You may want to consider using the <a href="http://msdn.microsoft.com/en-us/library/dd565622%28v=VS.85%29.aspx">Developer
    Tools</a> to preview your pages in different document compatibility
    modes or to experiment with different ways to achieve various visual and
    layout effects.  It's entirely possible there's another way to
    accomplish the same result.</p>
    </li>
    <li>
    <p>If the Document Object Model
    (DOM) doesn't support a feature that you need, you may be able to add
    the feature using <a href="http://msdn.microsoft.com/en-us/library/dd282900%28VS.85%29.aspx" target="_top">DOM mutable prototypes</a>.</p>
    </li>
    <li>
    <p>If none of the
    previous suggestions apply, it may be worthwhile to consider using an
    alternate approach.</p>
    </li>
</ul>
<h2>Summary</h2>
<p>If
you must detect the browsers that view your Web sites, follow effective
practices: plan for future browser releases, convert values
appropriately, and design techniques to fail gracefully. Doing so will
reduce the long-term maintenance of your site and help ensure that your
site functions properly when viewed with newer versions of Internet
Explorer and other browsers.</p>
<div id="CommunityContentHeader" class="CommunityContentHeader">
<div><span h1="">Community Content</span></div>
<div><a href="http://msdn.microsoft.com/en-us/library/community-edits.rss?topic=ms537509%7Cen-us%7CVS.85" title="Annotations"><img alt="Annotations" src="http://i.msdn.microsoft.com/Hash/030c41d9079671d09a62d8e2c1db6973.gif" /></a></div>
</div>
<div>
<div h3="">Bad browser detection </div>
<div>
Using "v to detect IE is a bad idea because this will not
work if future versions of IE change this behavior. The officially
supported detection methods should be used.<br />
<br />
However this example
from the article is misleading. Since other browsers don't support
conditional comments [if !IE] results in comments that will show up in
no browsers.<br />
&lt;![if !IE]&gt;<br />
&lt;p&gt;You're not using Internet
Explorer.&lt;/p&gt;<br />
&lt;![endif]&gt;
</div>
<br />
</div>
<div>
<div h3=""><span>How
to detect IE8 using JavaScript </span></div>
<div>
Check out: <br />
http://blogs.msdn.com/giorgio/archive/2009/04/14/how-to-detect-ie8-using-javascript-client-side.aspx<br />
</div>
<br />
</div>
<div h3=""><span>Shortest
way of detecting IE </span></div>
<div>
<p>More
efficient way to detect any version of IE is</p>
<pre>function isMSIE() {<br />
<br />
return '"v' == 'v';<br />
<br />
}<br />
<br />
</pre>
<p><br />
The JScript engine used in IE doesn't recognize and
therefore escape vertical tabulation character while all other does.</p>
</div>
<img src ="http://www.blogjava.net/sealyu/aggbug/323114.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-06-09 04:35 <a href="http://www.blogjava.net/sealyu/archive/2010/06/09/323114.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Using the navigator object to detect client's browser</title><link>http://www.blogjava.net/sealyu/archive/2010/06/09/323113.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Tue, 08 Jun 2010 20:34:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/06/09/323113.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/323113.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/06/09/323113.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/323113.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/323113.html</trackback:ping><description><![CDATA[<p align="left">
Until one browser remains standing on the web (if ever), browser
detection
will continue to be part of any good JavaScripter's life. Whether
you're
gliding a div across the screen or creating an image rollover, it's
fundamental that only relevant browsers pick up on your code. In
this
tutorial we'll probe the navigator object of JavaScript, and show
how to use
it to perform browser detection, whether the subject is Firefox, <a id="KonaLink0" target="undefined" class="kLink" style="text-decoration: underline ! important; position: static;" href="http://www.javascriptkit.com/javatutors/navigator.shtml#"><font style="color: blue ! important; font-size: 12.9667px; position: static;" color="blue"><span style="color: blue ! important; position: relative;">Internet</span></font></a>
Explorer 7, Opera, etc.</p>
<h4 align="left">
<img src="http://www.javascriptkit.com/jkincludes/arrow2.gif" alt="" border="0" height="17" width="17" /> The navigator object</h4>
<p align="left">The navigator object was conceived back in the
days when
Netscape Navigator reined supreme. These days it serves as much as
an
irony of NS's diminished market share as way of probing browser
information.</p>
<p align="left">The navigator object of JavaScript contains the
following
core properties:</p>
<table border="1" cellpadding="3" cellspacing="0" width="100%">
    <tbody>
        <tr>
            <th bgcolor="#d8ea99" valign="top" width="25%">
            Properties</th>
            <th bgcolor="#d8ea99" width="75%">Description</th>
        </tr>
        <tr>
            <td valign="top" width="25%">appCodeName</td>
            <td width="75%">The code name of the browser.</td>
        </tr>
        <tr>
            <td valign="top" width="25%">appName</td>
            <td width="75%">The name of the browser (ie: <code><a id="KonaLink1" target="undefined" class="kLink" style="text-decoration: underline ! important; position: static;" href="http://www.javascriptkit.com/javatutors/navigator.shtml#"><font style="color: blue ! important; font-family: monospace; font-weight: 400; font-size: 12px; position: static;" color="blue"><span style="color: blue ! important; font-family: monospace; font-weight: 400; font-size: 12px; position: relative;">Microsoft</span></font></a>
            Internet Explorer</code>).</td>
        </tr>
        <tr>
            <td valign="top" width="25%">appVersion</td>
            <td width="75%">Version information for the browser
            (ie:<code> 4.75 [en] (Win98; U)</code>).</td>
        </tr>
        <tr>
            <td valign="top" width="25%">cookieEnabled</td>
            <td width="75%">Boolean that indicates whether the browser
            has
            cookies enabled.</td>
        </tr>
        <tr>
            <td valign="top" width="25%">language</td>
            <td width="75%">Returns the default language of the
            browser version (ie: <code>en-US</code>). <strong>NS and Firefox
            only.</strong></td>
        </tr>
        <tr>
            <td valign="top" width="25%">mimeTypes[]</td>
            <td width="75%">An array of all MIME types supported
            by the client. <strong>NS and Firefox only.</strong></td>
        </tr>
        <tr>
            <td valign="top" width="25%">platform[]</td>
            <td width="75%">The platform of the client's computer
            (ie: <code>Win32</code>).</td>
        </tr>
        <tr>
            <td valign="top" width="25%">plugins</td>
            <td width="75%">An array of all plug-ins currently
            installed on the client. <strong>NS and Firefox only.</strong></td>
        </tr>
        <tr>
            <td valign="top" width="25%">systemLanguage</td>
            <td width="75%">Returns the default language of the <a id="KonaLink2" target="undefined" class="kLink" style="text-decoration: underline ! important; position: static;" href="http://www.javascriptkit.com/javatutors/navigator.shtml#"><font style="color: blue ! important; font-size: 12.9667px; position: static;" color="blue"><span style="color: blue ! important; position: relative;">operating </span><span style="color: blue ! important; font-size: 12.9667px; position: relative;">system</span></font></a>
            (ie: <code>en-us</code>). <strong>IE only.</strong></td>
        </tr>
        <tr>
            <td valign="top" width="25%">userAgent</td>
            <td width="75%">String passed by browser as user-agent
            header. (ie: <code>Mozilla/4.0 (compatible; MSIE 6.0;
            Windows NT 5.1)</code>)</td>
        </tr>
        <tr>
            <td valign="top" width="25%">userLanguage</td>
            <td width="75%">Returns the preferred language setting of
            the user
            (ie: <code>en-ca</code>). <strong>IE only.</strong></td>
        </tr>
    </tbody>
</table>
<p align="left">Let's see exactly what these properties reveal of
the
browser you're <strong>currently using</strong>:</p>
<p align="left">
<script type="text/javascript">
with (document){
write("<strong>appCodeName:</strong> "+navigator.appCodeName+"<br />
")
write("<strong>appName:</strong> "+navigator.appName+"<br />
")
write("<strong>appVersion:</strong> "+navigator.appVersion+"<br />
")
write("<strong>userAgent:</strong> "+navigator.userAgent+"<br />
")
write("<strong>platform:</strong> "+navigator.platform+"<br />
")
}
</script>
<strong>appCodeName:</strong> Mozilla<br />
<strong>appName:</strong> Netscape<br />
<strong>appVersion:</strong>
5.0 (Windows; zh-CN)<br />
<strong>userAgent:</strong> Mozilla/5.0 (Windows; U;
Windows NT 6.1; zh-CN; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3<br />
<strong>platform:</strong>
Win32<br />
</p>
<h4 align="left">
<img src="http://www.javascriptkit.com/jkincludes/arrow2.gif" alt="" border="0" height="17" width="17" /> At a
glance</h4>
<p align="left">At a glance at the above table, you may be swayed
towards
turning to the following two properties to do your browser detection
bidding:</p>
<p align="left">navigator.appName<br />
navigator.appVersion</p>
<p align="left">After all, you are trying to detect a browser's
name and
version right? However, they both will most likely mislead you. In
browsers such as various versions of Netscape and Firefox, these two
properties return simply "Netscape" for <code>appName</code>, and 5.0
for <code>appVersion</code> without any further distinction for
Firefox
and its version, and hence are pretty much useless in the real world.
For example, in both Firefox 1.x and Firefox 2.x, these two properties
return:</p>
<div align="left">
<pre align="left"><strong>appName:</strong> Netscape<br />
<br />
<strong>appVersion:</strong> 5.0 (Windows; en-US)</pre>
</div>
<p align="left">We need to turn to a property that's more thorough
in its
investigative work if we want more consistency and accuracy, and that
turns out to be <code>navigator.userAgent</code>.</p>
<h4 align="left">
<img src="http://www.javascriptkit.com/jkincludes/arrow2.gif" alt="" border="0" height="17" width="17" />
Detecting Firefox x.x</h4>
<p align="left">In Firefox 2.0.0.13 for example,
the <code>userAgent</code> property reads:</p>
<p align="left"><strong>UserAgent:</strong> Mozilla/5.0
(Windows;
U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13</p>
<p align="left">The detail we're interested in apparently lies at
the very
end, or <code>Firefox/2.0.0.13</code>. Different versions of Firefox
will
contain a different version number, but the pattern is consistent
enough.
The part we're interested in occurs after the string "<code>Firefox/</code>",
or the exact version number. There are many ways to get to it using
either
standard <a href="http://www.javascriptkit.com/jsref/string.shtml">String</a>
or <a href="http://www.javascriptkit.com/jsref/regexp.shtml">RegExp</a>
methods- I'm opting for the later here:</p>
<div align="left">
<p>&lt;script type="text/javascript"&gt;<br />
<br />
if (/Firefox["/"s]("d+"."d+)/.test(navigator.userAgent)){ //test for
Firefox/x.x or Firefox x.x (ignoring remaining digits);<br />
&nbsp;var ffversion=new Number(RegExp.$1) // capture x.x portion and store
as
a number<br />
&nbsp;if (ffversion&gt;=3)<br />
&nbsp; document.write("You're using FF 3.x or above")<br />
&nbsp;else if (ffversion&gt;=2)<br />
&nbsp; document.write("You're using FF 2.x")<br />
&nbsp;else if (ffversion&gt;=1)<br />
&nbsp; document.write("You're using FF 1.x")<br />
}<br />
else<br />
&nbsp;document.write("n/a")<br />
<br />
&lt;/script&gt;</p>
</div>
<p align="left"><strong>Output:</strong>
<script type="text/javascript">
if (/Firefox["/"s]("d+"."d+)/.test(navigator.userAgent)){ //test for Firefox/x.x or Firefox x.x (ignoring remaining digits);
var ffversion=new Number(RegExp.$1) // capture x.x portion and store as a number
if (ffversion>=3)
document.write("You're using FF 3.x or above")
else if (ffversion>=2)
document.write("You're using FF 2.x")
else if (ffversion>=1)
document.write("You're using FF 1.x")
}
else
document.write("n/a")
</script>
You're using FF 3.x or above</p>
<p align="left">Basically, I'm capturing just the <strong>v<em>ersonMajor.versionMinor</em></strong>
portion of the full version number of Firefox (ie: 2.0.0.13 becomes
simply 2.0), and using that as basis to detect the various versions of
Firefox. Delving any deeper, and the returned version may no longer be
a
number but a string (ie: 2.0.0), which makes numeric comparisons
cumbersome.</p>
<h4 align="left">
<img src="http://www.javascriptkit.com/jkincludes/arrow2.gif" alt="" border="0" height="17" width="17" />
Detecting IE x.x</h4>
<p align="left">In IE 7.0 for example,
the <code>userAgent</code> property reads:</p>
<p align="left"><strong>UserAgent:</strong> Mozilla/4.0
(compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)</p>
<p align="left">So the part we're interested in lies in the
middle, or
<code>MSIE 7.0;</code>. If you try a shortcut and use <code>
<a href="http://www.javascriptkit.com/jsref/globalfunctions.shtml">parseFloat</a></code>
on the entire string to get to the <code>7.0</code> portion, it won't
work. This
is due to the way <code>parseFloat</code> works- by returning the
first number it
encounters, which in this case is 4.0. Once again we need to use
either
standard <a href="http://www.javascriptkit.com/jsref/string.shtml">
String</a> or <a href="http://www.javascriptkit.com/jsref/regexp.shtml">
RegExp</a> methods again to get to the actual version number; below
I'm
using RegExp as well:</p>
<div align="left">
<pre align="left">&lt;script type="text/javascript"&gt;<br />
<br />
<br />
<br />
if (/MSIE ("d+"."d+);/.test(navigator.userAgent)){ //test for MSIE x.x;<br />
<br />
&nbsp;var ieversion=new Number(RegExp.$1) // capture x.x portion and store as a number<br />
<br />
&nbsp;if (ieversion&gt;=8)<br />
<br />
&nbsp; document.write("You're using IE8 or above")<br />
<br />
&nbsp;else if (ieversion&gt;=7)<br />
<br />
&nbsp; document.write("You're using IE7.x")<br />
<br />
&nbsp;else if (ieversion&gt;=6)<br />
<br />
&nbsp; document.write("You're using IE6.x")<br />
<br />
&nbsp;else if (ieversion&gt;=5)<br />
<br />
&nbsp; document.write("You're using IE5.x")<br />
<br />
}<br />
<br />
else<br />
<br />
&nbsp;document.write("n/a")<br />
<br />
&lt;/script&gt;</pre>
</div>
<p align="left"><strong>Output:</strong>
<script type="text/javascript">
if (/MSIE ("d+"."d+);/.test(navigator.userAgent)){ //test for MSIE x.x;
var ieversion=new Number(RegExp.$1) // capture x.x portion and store as a number
if (ieversion>=8)
document.write("You're using IE8 or above")
else if (ieversion>=7)
document.write("You're using IE7.x")
else if (ieversion>=6)
document.write("You're using IE6.x")
else if (ieversion>=5)
document.write("You're using IE5.x")
}
else
document.write("n/a")
</script>
n/a</p>
<h4 align="left">
<img src="http://www.javascriptkit.com/jkincludes/arrow2.gif" alt="" border="0" height="17" width="17" />
Detecting Opera x.x</h4>
<p align="left">Detecting Opera using the <code>navigator</code>
object at
first appears to be tricky business due to the browser's identity
crisis. You see, Opera 8 and below by default identifies itself as IE6
(or lower) in the <code>navigator</code> object. Users can override
this
setting under "<strong>Edit Site Settings</strong>" in the <a id="KonaLink3" target="undefined" class="kLink" style="text-decoration: underline ! important; position: static;" href="http://www.javascriptkit.com/javatutors/navigator.shtml#"><font style="color: blue ! important; font-size: 12.9667px; position: static;" color="blue"><span style="color: blue ! important; position: relative;">toolbar</span></font></a> to identify as
Opera or even another browser instead. Starting in Opera 9, the
browser
regains its confidence and identifies by default as itself, Opera,
though users can still modify this setting manually in the toolbar.
The
bottom line is, Opera can appear as either Opera, Internet Explorer,
or
another browser within a designated list in the <code>navigator</code>
object.</p>
<p align="left">Lets take a
look at what <code>navigator.userAgent</code> in Opera 8.5 returns
depending on what it has chosen to identify itself as (whether
automatically or manually):</p>
<p><strong>As IE6:</strong> Mozilla/4.0 (compatible; MSIE
6.0; Windows XP) Opera 8.5
[en]<br />
<strong>As Moz5:</strong> Mozilla/5.0 (<a id="KonaLink4" target="undefined" class="kLink" style="text-decoration: underline ! important; position: static;" href="http://www.javascriptkit.com/javatutors/navigator.shtml#"><font style="color: blue ! important; font-family: Courier new; font-weight: 400; font-size: 13px; position: static;" color="blue"><span style="color: blue ! important; font-family: Courier new; font-weight: 400; font-size: 13px; position: relative;">Windows </span><span style="color: blue ! important; font-family: Courier new; font-weight: 400; font-size: 13px; position: relative;">XP</span></font></a>;
U) Opera 8.5 [en]<br />
<strong>As Opera:</strong> Opera/8.5 (<a id="KonaLink5" target="undefined" class="kLink" style="text-decoration: underline ! important; position: static;" href="http://www.javascriptkit.com/javatutors/navigator.shtml#"><font style="color: blue ! important; font-family: Courier new; font-weight: 400; font-size: 13px; position: static;" color="blue"><span style="color: blue ! important; font-family: Courier new; font-weight: 400; font-size: 13px; position: relative;">Windows</span></font></a>
XP; U) [en]
</p>
<p>Notice how if it's set to identify as IE, <code>MSIE 6.0</code>
appears
within the string, while if set to identify as Mozilla, <code>
Mozilla/5.0</code> appears instead. As Opera itself, <code>Opera/8.5</code>
appears. In all three cases, the one commonality that we can exploit
to
actually detect Opera and its true version regardless of which
identify
it's decided to take on is the string "<code>Opera x.x</code>" or "<code>Opera/x.x</code>"
within <code>navigator.userAgent</code>. In other words, there are two
versions of the target string we need to be aware of. With that said,
here's how you might go about testing for a specific version of Opera,
which turns out to be no different than the technique used for
detecting, say, Firefox:</p>
<p>&lt;script
type="text/javascript"&gt;<br />
//Note: userAgent in Opera9.24 WinXP returns: Opera/9.24 (Windows NT
5.1; U;
en)<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userAgent in Opera
8.5 (identified as IE) returns: Mozilla/4.0 (compatible; MSIE 6.0;
Windows
NT 5.1) Opera 8.50 [en]<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userAgent in Opera
8.5 (identified as Opera) returns: Opera/8.50 (Windows NT 5.1; U) [en]<br />
<br />
if (/Opera["/"s]("d+"."d+)/.test(navigator.userAgent)){ //test for
Opera/x.x
or Opera x.x (ignoring remaining decimal places);<br />
&nbsp;var oprversion=new Number(RegExp.$1) // capture x.x portion and store
as a
number<br />
&nbsp;if (oprversion&gt;=10)<br />
&nbsp; document.write("You're using Opera 10.x or above")<br />
&nbsp;else if (oprversion&gt;=9)<br />
&nbsp; document.write("You're using Opera 9.x")<br />
&nbsp;else if (oprversion&gt;=8)<br />
&nbsp; document.write("You're using Opera 8.x")<br />
&nbsp;else if (oprversion&gt;=7)<br />
&nbsp; document.write("You're using Opera 7.x")<br />
&nbsp;else<br />
&nbsp; document.write("n/a")<br />
}<br />
else<br />
&nbsp;document.write("n/a")<br />
&lt;/script&gt;</p>
<p align="left">
<strong>Output:</strong>
<script type="text/javascript">
//Note: userAgent in Opera9.24 WinXP returns: Opera/9.24 (Windows NT 5.1; U; en)
//         userAgent in Opera 8.5 (identified as IE) returns: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 8.50 [en]
//         userAgent in Opera 8.5 (identified as Opera) returns: Opera/8.50 (Windows NT 5.1; U) [en]
if (/Opera["/"s]("d+"."d+)/.test(navigator.userAgent)){ //test for Opera/x.x or Opera x.x (ignoring remaining decimal places);
var oprversion=new Number(RegExp.$1) // capture x.x portion and store as a number
if (oprversion>=10)
document.write("You're using Opera 10.x or above")
else if (oprversion>=9)
document.write("You're using Opera 9.x")
else if (oprversion>=8)
document.write("You're using Opera 8.x")
else if (oprversion>=7)
document.write("You're using Opera 7.x")
else
document.write("n/a")
}
else
document.write("n/a")
</script>
n/a</p>
<h4 align="left">
<img src="http://www.javascriptkit.com/jkincludes/arrow2.gif" alt="" border="0" height="17" width="17" /> Conclusion</h4>
<p align="left">We've seen how to use navigator to detect the
browser type
of your visitors. If the potential pitfalls and complexity of
usage of it
is a little too much for you, an alternative is to use <strong><a href="http://www.javascriptkit.com/javatutors/objdetect.shtml">
Object Detection</a></strong>. Whichever method you choose, just be
sure to
choose one!</p>
<img src ="http://www.blogjava.net/sealyu/aggbug/323113.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-06-09 04:34 <a href="http://www.blogjava.net/sealyu/archive/2010/06/09/323113.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IE 和 Firefox中取得createRange()的起点和终点的值</title><link>http://www.blogjava.net/sealyu/archive/2010/06/08/323099.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Tue, 08 Jun 2010 14:23:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/06/08/323099.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/323099.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/06/08/323099.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/323099.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/323099.html</trackback:ping><description><![CDATA[&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;TEST&lt;/title&gt;<br />
&lt;style&gt;<br />
body,td{<br />
&nbsp;&nbsp;&nbsp; font-family: verdana, arial, helvetica, sans-serif;<br />
&nbsp;&nbsp;&nbsp; font-size: 12px;<br />
}<br />
&lt;/style&gt;<br />
&lt;script type="text/javascript"&gt;<br />
&nbsp;&nbsp;&nbsp; var start=0;<br />
&nbsp;&nbsp;&nbsp; var end=0;<br />
&nbsp;&nbsp;&nbsp; function add(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var textBox = document.getElementById("ta");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var pre = textBox.value.substr(0, start);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var post = textBox.value.substr(end);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; textBox.value = pre + document.getElementById("inputtext").value + post;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; function savePos(textBox){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //如果是Firefox(1.5)的话，方法很简单<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(typeof(textBox.selectionStart) == "number"){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start = textBox.selectionStart;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end = textBox.selectionEnd;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //下面是IE(6.0)的方法，麻烦得很，还要计算上'"n'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if(document.selection){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var range = document.selection.createRange();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(range.parentElement().id == textBox.id){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // create a selection of the whole textarea<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var range_all = document.body.createTextRange();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; range_all.moveToElementText(textBox);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //两个range，一个是已经选择的text(range)，一个是整个textarea(range_all)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //range_all.compareEndPoints()比较两个端点，如果range_all比range更往左(further to the left)，则&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //返回小于0的值，则range_all往右移一点，直到两个range的start相同。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // calculate selection start point by moving beginning of range_all to beginning of range<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (start=0; range_all.compareEndPoints("StartToStart", range) &lt; 0; start++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; range_all.moveStart('character', 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // get number of line breaks from textarea start to selection start and add them to start<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 计算一下"n<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (var i = 0; i &lt;= start; i ++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (textBox.value.charAt(i) == '\n')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // create a selection of the whole textarea<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var range_all = document.body.createTextRange();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; range_all.moveToElementText(textBox);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // calculate selection end point by moving beginning of range_all to end of range<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (end = 0; range_all.compareEndPoints('StartToEnd', range) &lt; 0; end ++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; range_all.moveStart('character', 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // get number of line breaks from textarea start to selection end and add them to end<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (var i = 0; i &lt;= end; i ++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (textBox.value.charAt(i) == '\n')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end ++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById("start").value = start;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById("end").value = end;<br />
&nbsp;&nbsp;&nbsp; }<br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;form action="a.cgi"&gt;<br />
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;start: &lt;input type="text" id="start" size="3"/&gt;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;end: &lt;input type="text" id="end" size="3"/&gt;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td colspan="2"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;textarea id="ta" onKeydown="savePos(this)"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onKeyup="savePos(this)"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onmousedown="savePos(this)"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onmouseup="savePos(this)"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onfocus="savePos(this)"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rows="14" cols="50"&gt;&lt;/textarea&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;&lt;input type="text" id="inputtext" /&gt;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;&lt;input type="button" onClick="add()" value="Add Text"/&gt;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
<br />
附：IE 中的定义： http://msdn.microsoft.com/en-us/library/ms535872%28VS.85%29.aspx<br />
http://msdn.microsoft.com/en-us/library/ms533042%28VS.85%29.aspx<br />
<img src ="http://www.blogjava.net/sealyu/aggbug/323099.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-06-08 22:23 <a href="http://www.blogjava.net/sealyu/archive/2010/06/08/323099.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Setting the name attribute in IE's DOM</title><link>http://www.blogjava.net/sealyu/archive/2010/06/04/322693.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Thu, 03 Jun 2010 22:04:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/06/04/322693.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/322693.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/06/04/322693.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/322693.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/322693.html</trackback:ping><description><![CDATA[<p>An old problem with IE is that you can't set the name attribute on form
elements in the DOM directly. Fortunately there is a workaround to this issue
using IE's <a title="MSDN mergeAttributes Documentation" href="http://msdn.microsoft.com/en-us/library/ms536614%28VS.85%29.aspx">mergeAttributes</a>
method. By creating a temporary named element acceptable by IE's createElement
method, you can merge the name attribute into the element you desire, allowing
you to name or rename an element. An example demo follows.</p>
<pre>var setName = function(el, newName) {<br />
<br />
el = (typeof el === "string") ? document.getElementById(el) : el;<br />
<br />
el.name = newName;<br />
<br />
if (/*@cc_on!@*/0) { // Internet Explorer test (needs to be modified for IE8)<br />
<br />
el.mergeAttributes(document.createElement("&lt;INPUT name='" + newName + "'/&gt;"), false);<br />
<br />
}<br />
<br />
};<br />
<br />
</pre>
<p>In Mootools 1.2.1:</p>
<pre>var setName = function(elementId, newName) {<br />
<br />
var el = (!!elementId) ? $(elementId) : null;<br />
<br />
if (!elementId || !newName || !el) return;<br />
<br />
<br />
<br />
el.set({ "name" : newName });<br />
<br />
if (Browser.Engine.trident4 || Browser.Engine.trident5) {<br />
<br />
el.mergeAttributes(document.createElement("&lt;INPUT name='" + newName + "'/&gt;"), false);<br />
<br />
}<br />
<br />
};<br />
<br />
</pre>
<h3>Demo:</h3>
<div id="renameDemo"><input value="Set Random Name" name="randomName808" type="submit" />
<pre id="renameDemoOutput">Before OUTERHTML:<br />
<br />
&lt;INPUT id=renameTarget value="Set Random Name" type=submit&gt;</pre>
</div>
<img src ="http://www.blogjava.net/sealyu/aggbug/322693.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-06-04 06:04 <a href="http://www.blogjava.net/sealyu/archive/2010/06/04/322693.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Inserting at the cursor using JavaScript</title><link>http://www.blogjava.net/sealyu/archive/2010/06/04/322689.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Thu, 03 Jun 2010 19:12:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/06/04/322689.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/322689.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/06/04/322689.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/322689.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/322689.html</trackback:ping><description><![CDATA[<p><strong>NOTE: I&#8217;ve <a href="http://alexking.org/blog/2004/06/03/js-quicktags-under-lgpl/">released
a set of JavaScript Quicktags</a> (that implement this technique) under
the LGPL license. Please look at this code as it has a variety of
enhancements and bug fixes.</strong></p>
<p>I discovered a real JavaScript gem in <a href="http://www.phpmyadmin.net/" rel="external">PHPMyAdmin</a> this
morning. They have code that inserts content into a &lt;textarea&gt; at
the cursor position instead of just at the beginning/end of the content.
This is something I thought wasn&#8217;t possible &#8211; I&#8217;m quite pleased I was
wrong.</p>
<p>I&#8217;ll be glad to see this code spread quickly to web forms that use
buttons to aid in styling text and inserting image and link tags. <a href="http://www.wordpress.org/" rel="external">WordPress</a> and other
blog and web forum packages would really benefit from this. (PHPMyAdmin
is GPL, so any other GPL app should be able to use their code directly
with attribution).</p>
<p>Here is a quick look at a generic version of the technique:</p>
<div style="overflow: auto; width: 375px;"><code>function insertAtCursor(myField, myValue) {<br />
//IE support<br />
if (document.selection) {<br />
myField.focus();<br />
sel = document.selection.createRange();<br />
sel.text = myValue;<br />
}<br />
//MOZILLA/NETSCAPE support<br />
else if (myField.selectionStart || myField.selectionStart == '0') {<br />
var startPos = myField.selectionStart;<br />
var endPos = myField.selectionEnd;<br />
myField.value = myField.value.substring(0, startPos)<br />
+ myValue<br />
+ myField.value.substring(endPos,
myField.value.length);<br />
} else {<br />
myField.value += myValue;<br />
}<br />
}<br />
// calling the function<br />
insertAtCursor(document.formName.fieldName, 'this value');</code></div>
I guess when the mouse leaves the textarea, it still has a cursor
position left over. This code uses that position just as you&#8217;d want it
to.
<img src ="http://www.blogjava.net/sealyu/aggbug/322689.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-06-04 03:12 <a href="http://www.blogjava.net/sealyu/archive/2010/06/04/322689.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>15个使用jQuery实现图片幻灯片效果的JS源码(转)</title><link>http://www.blogjava.net/sealyu/archive/2010/05/18/321222.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Mon, 17 May 2010 18:02:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/05/18/321222.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/321222.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/05/18/321222.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/321222.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/321222.html</trackback:ping><description><![CDATA[导读：jQuery作为JS的重量级框架应用十分普遍，很多效果可以用jQuery来写，具有代码简洁和浏览器兼容
的优点，本文着重介绍了15个使用jQuery来写的图片幻灯片效果源码，其中很多效果可以与Flash媲美！
<p>jQuery作为一个应用最广泛的JavaScript框架之一，第三方开发者不断地为其开发出新的 jQuery
插件应用，从而使得jQuery可以帮助用户实现各种各样不同寻常的 Web
效果，作为最常使用的图片幻灯片效果更是jQuery的强项，看完本文为你整理推荐的15个优秀的jQuery图片幻灯片/画廊效果，你会收获更多。</p>
<p>15个优秀的jQuery图片幻灯片/画廊效果，基本都已经包含了原插件的发布地址、使用方法和源代码下载。</p>
<h5>1，Gallerific</h5>
<p align="center"><a onfocus="onfocus" href="http://www.twospy.com/galleriffic/index.html"><strong><img alt="" src="http://www.websbook.com/upimg/allimg/090509/0615280.png" /></strong></a></p>
<p><a onfocus="onfocus" target="_blank" href="http://www.twospy.com/galleriffic/index.html">Galleriffic</a> 是使用
Mike Alsup 的 <a onfocus="onfocus" target="_blank" href="http://www.bbon.cn/2009/05/jQuery%20Cycle%20plugin">jQuery Cycle
plugin</a> 创建的图片展示效果，包括缩略图、图片标题和描述等详细功能，是一个非常不错的高质量画廊相册展示工具。</p>
<h5>2，ZoomImage</h5>
<p><a onfocus="onfocus" href="http://hotajax.org/jquery/photos-other-plugins/554-zoomimage-jquery-plugin.html"><img style="display: block; float: none; margin-left: auto; margin-right: auto;" alt="" src="http://www.websbook.com/upimg/allimg/090509/0615281.png" /></a></p>
<p><a onfocus="onfocus" href="http://hotajax.org/jquery/photos-other-plugins/554-zoomimage-jquery-plugin.html">zoomimage</a>
，以一种独具魅力的方式展示图片效果。缩略图链接在本页弹出大图，并且可以可以随意拖拽该悬浮图片。</p>
<h5>3，EasySlider</h5>
<p align="center"><a onfocus="onfocus" href="http://cssglobe.com/post/4004/easy-slider-15-the-easiest-jquery-plugin-for-sliding"><strong><img alt="" src="http://www.websbook.com/upimg/allimg/090509/0615282.png" height="140" width="450" /></strong></a></p>
<p><a onfocus="onfocus" target="_blank" href="http://cssglobe.com/post/4004/easy-slider-15-the-easiest-jquery-plugin-for-sliding">Easy
Slider</a> 可以实现图片或其他任意内容，在水平或垂直方向上的滑动效果，你还可以通过 CSS 自定义设置样式。</p>
<h5>4，The Slider from Barack Obama&#8217;s website</h5>
<p align="center"><a onfocus="onfocus" href="http://devthought.com/barackslideshow-an-elegant-lightweight-slideshow-script/"><img alt="" src="http://www.websbook.com/upimg/allimg/090509/0615283.jpg" /></a></p>
<p>一个源自美国总统 Barack Obama 网站的垂下滑动菜单控制的图片幻灯效果。</p>
<h5>5，CodaSlider</h5>
<p align="center"><a onfocus="onfocus" href="http://www.ndoherty.com/blog/2007/09/15/introducing-coda-slider/"><img alt="" src="http://www.websbook.com/upimg/allimg/090509/0615284.png" /></a></p>
<p><a onfocus="onfocus" target="_blank" href="http://www.ndoherty.com/blog/2007/09/15/introducing-coda-slider/">CodaSlider</a>，
又一个不错的滑动控制效果。</p>
<h5>6，jQuery Slider II</h5>
<p align="center"><a onfocus="onfocus" href="http://benjaminsterling.com/jquery-jqgalviewii-photo-gallery/"><img alt="" src="http://www.websbook.com/upimg/allimg/090509/0615285.jpg" /></a></p>
<p><a onfocus="onfocus" target="_blank" href="http://benjaminsterling.com/jquery-jqgalviewii-photo-gallery/">jQuery
Slider II</a> 的布局非常符合操作习惯，在底部列出带滚动条的缩略图控制列表，然后在上面显示对应图片的大图浏览，非常适合做高级相册。</p>
<h5>7，Beautiful Slider</h5>
<p align="center"><a onfocus="onfocus" href="http://dreamcss.blogspot.com/2009/04/create-beautiful-jquery-sliders.html"><strong><img alt="" src="http://www.websbook.com/upimg/allimg/090509/0615286.png?imgmax=800" height="181" width="450" /></strong></a></p>
<p><a onfocus="onfocus" target="_blank" href="http://dreamcss.blogspot.com/2009/04/create-beautiful-jquery-sliders.html">Beautiful
Slider</a>，
光看这个效果图你就知道这个插件有多棒了吧，是的，这个插件实现的效果已经不逊色于Flash完成的效果，整体表现流畅，文字显示效果更是创意独特。</p>
<h5>８，LoopedSlider</h5>
<p><a onfocus="onfocus" href="http://code.google.com/p/loopedslider/"><img style="display: block; float: none; margin-left: auto; margin-right: auto;" alt="" src="http://www.websbook.com/upimg/allimg/090509/0615287.png" /></a></p>
<p><a onfocus="#ff0000" target="_blank" href="http://code.google.com/p/loopedslider/">loopedSlider</a>是又一个任意内容滚动
切换的幻灯片插件，使用操作简单。</p>
<h5>9，SpaceGallery</h5>
<p><a onfocus="onfocus" href="http://eyecon.ro/spacegallery/"><img style="display: block; float: none; margin-left: auto; margin-right: auto;" alt="Accessible news slider" src="http://www.websbook.com/upimg/allimg/090509/0615288.png" /></a></p>
<p><a onfocus="undefined" target="_blank" href="http://eyecon.ro/spacegallery/">SpaceGallery</a>是一个全新的jQuery插件，点击当
前图片，会自动放大消失，同时后面的图片向前展示，有一种时光机器的感觉。</p>
<h5>10，jQuery Popeye</h5>
<p><a onfocus="onfocus" href="http://plugins.jquery.com/project/popeye"><img style="display: block; float: none; margin-left: auto; margin-right: auto;" alt="" src="http://www.websbook.com/upimg/allimg/090509/0615289.png" /></a></p>
<h5>11，Noobslide</h5>
<p><a onfocus="onfocus" href="http://www.efectorelativo.net/laboratory/noobSlide/"><img style="display: block; float: none; margin-left: auto; margin-right: auto;" alt="Noobslide" src="http://www.websbook.com/upimg/allimg/090509/06152810.png" /></a></p>
<h5>12，Accessible News Slider</h5>
<p><a onfocus="onfocus" href="http://www.reindel.com/accessible_news_slider/"><img style="display: block; float: none; margin-left: auto; margin-right: auto;" alt="Accessible news slider" src="http://www.websbook.com/upimg/allimg/090509/06152811.jpg" /></a></p>
<h5>13，SmoothGallery</h5>
<p><a onfocus="onfocus" href="http://smoothgallery.jondesign.net/"><img style="display: block; float: none; margin-left: auto; margin-right: auto;" alt="SmoothGallery" src="http://www.websbook.com/upimg/allimg/090509/06152812.png" /></a></p>
<p><a onfocus="undefined" target="_blank" href="http://smoothgallery.jondesign.net/">SmoothGallery</a>是一个最好的
Javascript 幻灯片效果之一，可以实现各种不同的幻灯片转换效果。</p>
<h5>14，jQuery Multimedia Portfolio</h5>
<p><a onfocus="onfocus" href="http://www.openstudio.fr/jQuery-Multimedia-Portfolio.html"><img style="display: block; float: none; margin-left: auto; margin-right: auto;" alt="jQuery Multimedia Portfolio" src="http://www.websbook.com/upimg/allimg/090509/06152813.png" /></a></p>
<p><a onfocus="undefined" target="_blank" href="http://www.openstudio.fr/jQuery-Multimedia-Portfolio.html">jQuery
Multimedia Portfolio</a>是一个基于jQuery
的滑动效果插件,除了可以展示图片之外，还可以加入各种不同类型的多媒体文件。</p>
<h5><strong>15，s3Slider</strong></h5>
<p><a onfocus="onfocus" href="http://www.serie3.info/s3slider/"><img style="display: block; float: none; margin-left: auto; margin-right: auto;" alt="" src="http://www.websbook.com/upimg/allimg/090509/06152814.jpg" height="187" width="450" /></a></p>
<p><a onfocus="undefined" target="_blank" href="http://www.serie3.info/s3slider/">s3Slider</a>是一个非常简单实用的流畅幻灯片效果，这个
插件被应用在无数的WordPress专业主题模板中。</p>
<img src ="http://www.blogjava.net/sealyu/aggbug/321222.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-05-18 02:02 <a href="http://www.blogjava.net/sealyu/archive/2010/05/18/321222.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript 字符串处理全攻略(转)</title><link>http://www.blogjava.net/sealyu/archive/2010/04/15/318462.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Thu, 15 Apr 2010 15:47:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/04/15/318462.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/318462.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/04/15/318462.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/318462.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/318462.html</trackback:ping><description><![CDATA[<div id="blog_text" class="cnt">
<p><strong>javascript&nbsp;字符串处理</strong></p>
<p>文章来源：<a href="http://lmgq.vip.sina.com/tech/jsadvancedlesson/c2p1.htm" target="_blank">http://lmgq.vip.sina.com/tech/jsadvancedlesson/c2p1.htm</a>
<br />
</p>
<p>一、声明字符串:<br />
var&nbsp;normal_monkey&nbsp;=&nbsp;"I&nbsp;am&nbsp;a&nbsp;monkey!&lt;br&gt;";<br />
document.writeln("Normal&nbsp;monkey&nbsp;"&nbsp;+&nbsp;normal_monkey);</p>
<p>var&nbsp;bold_monkey&nbsp;=&nbsp;normal_monkey.bold();<br />
document.writeln("Bold&nbsp;monkey&nbsp;"&nbsp;+&nbsp;bold_monkey);</p>
<p>这里的声明：&nbsp;var&nbsp;bold_monkey&nbsp;=&nbsp;normal_monkey.bold();<br />
和下面对声明是等同的：&nbsp;<br />
var&nbsp;bold_monkey&nbsp;=&nbsp;"&lt;b&gt;"&nbsp;+&nbsp;normal_monkey&nbsp;+&nbsp;"&lt;/b&gt;";</p>
<p>第1个版本的声明看起来要简明得多。这里用到了字符串对象中<br />
的bold对象，其他的字符串对象还有indexOf,&nbsp;charAt,&nbsp;<br />
substring,&nbsp;以及split,&nbsp;这些方法可以深入字符串的组成结构。<br />
首先我们研究一下indexOf。</p>
<p>2、indexOf<br />
indexOf用于发现一系列的字符在一个字符串中等位置并告诉你子字符串的起始位置。如</p>
<p>果一个字符串中部包含该子字符串则indexOf返回returns&nbsp;"-1."<br />
例子：<br />
var&nbsp;the_word&nbsp;=&nbsp;"monkey";&nbsp;<br />
&nbsp;//让我们从单词&nbsp;"monkey"开始。&nbsp;<br />
var&nbsp;location_of_m&nbsp;=&nbsp;the_word.indexOf("m");&nbsp;<br />
&nbsp;//location_of_m(字母m的位置)将为0，因为字母m位于该字符串的起始位置。<br />
var&nbsp;location_of_o&nbsp;=&nbsp;the_word.indexOf("o");&nbsp;<br />
&nbsp;//location_of_o(字母o的位置)将为1。<br />
var&nbsp;location_of_key&nbsp;=&nbsp;the_word.indexOf("key");&nbsp;<br />
&nbsp;//location_of_key(key的位置)将为3因为子字符串&#8220;key&#8221;以字母k开始，而k</p>
<p>在单词monkey中的位置是3。<br />
var&nbsp;location_of_y&nbsp;=&nbsp;the_word.indexOf("y");&nbsp;<br />
&nbsp;//location_of_y)字母y的位置)是5。&nbsp;<br />
var&nbsp;cheeky&nbsp;=&nbsp;the_word.indexOf("q");&nbsp;<br />
&nbsp;//cheeky值是-1，因为在单词&#8220;monkey&#8221;中没有字母q。</p>
<p>indexOf更实用之处:<br />
var&nbsp;the_email&nbsp;=&nbsp;prompt("What&#8217;s&nbsp;your&nbsp;email&nbsp;address?",&nbsp;"");<br />
var&nbsp;the_at_is_at&nbsp;=&nbsp;the_email.indexOf("@");<br />
if&nbsp;(the_at_is_at&nbsp;==&nbsp;-1)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert("You&nbsp;loser,&nbsp;email&nbsp;addresses&nbsp;must&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;have&nbsp;@&nbsp;signs&nbsp;in&nbsp;them.");<br />
}</p>
<p>这段代码询问用户的电子邮件地址，如果用户输入的电子邮件地址中不包含字符&nbsp;则&nbsp;提</p>
<p>示用户＂＠你输入的电子邮件地址无效，电子邮件的地址必须包含字符@。＂</p>
<p>3、charAt&nbsp;<br />
chatAt方法用于发现一个字符串中某个特定位置的字符。<br />
这里是一个例子：<br />
var&nbsp;the_word&nbsp;=&nbsp;"monkey";<br />
var&nbsp;the_first_letter&nbsp;=&nbsp;the_word.charAt(0);<br />
var&nbsp;the_second_letter&nbsp;=&nbsp;the_word.charAt(1);<br />
var&nbsp;the_last_letter&nbsp;=&nbsp;the_word.charAt(the_word.length-1);</p>
<p>the_first_letter(第1个字符)是"m"<br />
the_second_letter(第2个字符)是"o"<br />
the_last_letter(最后一个字符)是&nbsp;"y"</p>
<p>注意利用字符串的length(长度)属性你可以发现在包含多少个字符。在本例中，</p>
<p>the_word是"monkey"，所以the_word.length是6。不要忘记在一个字符串中第1个字符的</p>
<p>位置是0，所以最后一个字符的位置就是length-1。所以在最后一行中用了</p>
<p>the_word.length-1。&gt;&gt;</p>
<p>4、子字符串（substring）<br />
子字符串（substring）和charAt有些象，不同之处在于它能够从一个单词中抓取整个的</p>
<p>子字符串，而不只是字母，这里是其格式：</p>
<p>var&nbsp;the_substring&nbsp;=&nbsp;the_string.substring(from,&nbsp;to);</p>
<p>"From"指的是子字符串中第１个字母的位置，"to"有点奇特，它是该子字符串中比最后</p>
<p>一个位置大１的位置．使用这种神奇的方法你可以标记子字符串的起始和结束位置，用</p>
<p>"to"的位置减去"from"的位置就会得出该子字符串的长度：</p>
<p>var&nbsp;the_string&nbsp;=&nbsp;"monkey";<br />
var&nbsp;clergy&nbsp;=&nbsp;the_string.substring(0,4);<br />
var&nbsp;tool&nbsp;=&nbsp;the_string.substring(3,6);</p>
<p>运行该段代码后变量clergy的值为"monk";&nbsp;变量tool的值为"key"。</p>
<p>子字符串常和indexOf一起使用，将字符串分成若干块．例如，<br />
你可以从一个给定的URL中抽取出其域名：</p>
<p>var&nbsp;the_url&nbsp;=&nbsp;prompt("What&#8217;s&nbsp;the&nbsp;URL?","");<br />
var&nbsp;lead_slashes&nbsp;=&nbsp;the_url.indexOf("//");<br />
var&nbsp;domain_start&nbsp;=&nbsp;lead_slashes&nbsp;+&nbsp;2;<br />
var&nbsp;without_resource&nbsp;=&nbsp;the_url.substring(domain_start,&nbsp;the_url.length);<br />
var&nbsp;next_slash&nbsp;=&nbsp;without_resource.indexOf("/");<br />
var&nbsp;domain&nbsp;=&nbsp;without_resource.substring(0,&nbsp;next_slash);</p>
<p>这段代码的意思是：如果你输入<br />
"<a href="http://www.webmonkey.com/javascript/index.html%22" target="_blank">http://www.webmonkey.com/javascript/index.html"</a>;，则域名
就是</p>
<p>"www.webmonkey.com"&nbsp;．如果这个方法对你来说有些麻烦，我将向你介绍如何使用split</p>
<p>方法简化其执行过程．但是首先我们作一些分析．</p>
<p>基本的技巧是将第１个斜杠和第２个斜杠之间的内容分离出来：<br />
var&nbsp;the_url&nbsp;=&nbsp;prompt("What&#8217;s&nbsp;the&nbsp;URL?","");&nbsp;<br />
//这行代码向用户询问一个URL．假设用户输入了<br />
"<a href="http://www.webmonkey.com/javascript/index.html.%22" target="_blank">http://www.webmonkey.com/javascript/index.html."</a>;&nbsp;<br />
var&nbsp;lead_slashes&nbsp;=&nbsp;the_url.indexOf("//");&nbsp;<br />
这行代码确定第一个双斜杠的位置．在本例中lead_slashes的值是５，因为双斜杠的位</p>
<p>置从５开始．</p>
<p>你可能会想，通常的URL都是以http://开始，所以双斜杠的位置肯定是在５开始，为什</p>
<p>么还要加入indexOf这一段多余的代码呢？但是问题的关键在于你不知道用户在填入URL</p>
<p>时是否一定填入http:，他们也许会不小心多键入了一个空格，也许他们所键入的URL在</p>
<p>一个加密服务器上，其URL是"<a href="https://www.whatever.com/%22" target="_blank">https://www.whatever.com/"</a>;&nbsp;．
在编程你必须预料到种种</p>
<p>可能发生的问题．所以我们必须用indexOf方法确定双斜杠的确切的起始位置．</p>
<p><strong>var&nbsp;domain_start&nbsp;=&nbsp;lead_slashes&nbsp;+&nbsp;2;&nbsp;</strong></p>
<p>这行代码用于计算该域名的第１个字母的起始位置．由于这里有一个双斜杠，所以域名</p>
<p>第１个字母的起始位置应该在双斜杠所在位置加２的位置．</p>
<p>var&nbsp;without_resource&nbsp;=&nbsp;the_url.substring(domain_start,&nbsp;the_string.length);&nbsp;</p>
<p>这段代码将域名起始位置往后的所有字符都提取出来．所以执行完这行代码后</p>
<p>without_resource是"www.webmonkey.com/javascript/index.html."&nbsp;</p>
<p>var&nbsp;next_slash&nbsp;=&nbsp;without_resource.indexOf("/");&nbsp;</p>
<p>这行代码计算出该字符串中下一个斜杠的位置，而从该字符串起始位置到这个斜杠之间</p>
<p>的内容就是域名．在本例中下一个斜杠的位置是17。</p>
<p>var&nbsp;domain&nbsp;=&nbsp;without_resource.substring(0,&nbsp;next_slash);&nbsp;</p>
<p>最后一步是提取出该字符串起始位置到下一个斜杠之间的所有内容．在本例中使得域名</p>
<p>等同于"www.webmonkey.com"。</p>
<p>这样做确实很麻烦，利用split方法则可以使该过程容易很多．&gt;&gt;</p>
<p>5、分割方法(splitting&nbsp;method)&nbsp;<br />
你可以使用split方法用限位器来分割一系列的名称，然后将其<br />
放在一个数组中．例如：</p>
<p>var&nbsp;my_friends&nbsp;="trixie,moxie,sven,guido,hermes";</p>
<p>var&nbsp;friend_array&nbsp;=my_friends.split(",");</p>
<p>for&nbsp;(loop=0;&nbsp;loop&nbsp;&lt;&nbsp;friend_array.length;loop++)<br />
{&nbsp;&nbsp;&nbsp;&nbsp;document.writeln(friend_array[loop]&nbsp;+&nbsp;"&nbsp;is&nbsp;myfriend.&lt;br&gt;");}</p>
<p>这段代码将字符串my_friends分割成包含５个元素的数组．JavaScript可以为你自动建</p>
<p>立一个数组，所以你无需使用new&nbsp;Array()．</p>
<p>将字符串分割成数组之后，我们使用了循环语句写出每一个名称．我们可以利用split方</p>
<p>法简化前面所讲到的域名提取：</p>
<p>var&nbsp;the_url&nbsp;=&nbsp;prompt("What&#8217;s&nbsp;the&nbsp;URL?","");<br />
var&nbsp;first_split&nbsp;=&nbsp;the_url.split("//");<br />
var&nbsp;without_resource&nbsp;=&nbsp;first_split[1];<br />
var&nbsp;second_split&nbsp;=&nbsp;without_resource.split("/");<br />
var&nbsp;domain&nbsp;=&nbsp;second_split[0];</p>
<p>这段代码简化了很多而且也更容易理解．我们来分析一些这段代码：</p>
<p>var&nbsp;the_url&nbsp;=&nbsp;prompt("What&#8217;s&nbsp;the&nbsp;URL?","");&nbsp;</p>
<p>提示用户输入一个URL，假设用户输入<br />
"<a href="http://www.webmonkey.com/javascript/index.html%22" target="_blank">http://www.webmonkey.com/javascript/index.html"</a>;&nbsp;．<br />
var&nbsp;first_split&nbsp;=&nbsp;the_url.split("//");&nbsp;<br />
将用户输入的字符串分割成两块：first_split[0]是"http:"，first_split[1]是</p>
<p>"www.webmonkey.com/javascript/index.html."&nbsp;<br />
var&nbsp;without_resource&nbsp;=&nbsp;first_split[1];&nbsp;<br />
//提取出数组中的第２个元素，所以现在without_resource是</p>
<p>"www.webmonkey.com/javascript/index.html."&nbsp;<br />
var&nbsp;second_split&nbsp;=&nbsp;without_resource.split("/");&nbsp;<br />
将without_resource分割成３块：www.webmonkey.com,javascript,&nbsp;和index.html．现</p>
<p>在你可以看到split的用途了吧？</p>
<p>var&nbsp;domain&nbsp;=&nbsp;second_split[0];&nbsp;</p>
<p>现在我们提取出新数组中的第１个元素就可得出域名． </p>
</div>
<img src ="http://www.blogjava.net/sealyu/aggbug/318462.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-04-15 23:47 <a href="http://www.blogjava.net/sealyu/archive/2010/04/15/318462.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Javascript: setTimeout()使用及 setInterval()使用</title><link>http://www.blogjava.net/sealyu/archive/2009/12/24/307165.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Thu, 24 Dec 2009 07:43:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/12/24/307165.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/307165.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/12/24/307165.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/307165.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/307165.html</trackback:ping><description><![CDATA[<div id="blog_text" class="cnt">
<p>Evaluates an expression after a specified number of milliseconds has elapsed.</p>
<p>(在指定时间过后执行指定的表达式)<br />
</p>
<p><font color="#ff0000"><br />
</font></p>
<p><font color="#ff0000">Syntax:</font><br />
</p>
<em>iTimerID = <em>window.setTimeout(<em>vCode, <em>iMilliSeconds [, <em>sLanguage])<br />
<br />
</em></em></em></em></em>
<p><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><font color="#ff0000">Parameters</font></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></p>
<blockquote>
<table>
    <tbody>
        <tr>
            <td><em>vCode</em></td>
            <td>Required.
            Variant that specifies the function pointer or string that indicates
            the code to be executed when the specified interval has elapsed.</td>
        </tr>
        <tr>
            <td><em>iMilliSeconds</em></td>
            <td>Required. Integer&nbsp;that specifies the number of  milliseconds.</td>
        </tr>
        <tr>
            <td><em>sLanguage</em></td>
            <td>Optional. String&nbsp;that specifies one of the following values:
            <table>
                <tbody>
                    <tr>
                        <td>JScript</td>
                        <td>Language is JScript.</td>
                    </tr>
                    <tr>
                        <td>VBScript</td>
                        <td>Language is VBScript.</td>
                    </tr>
                    <tr>
                        <td>JavaScript</td>
                        <td>Language is  JavaScript.</td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
</blockquote>
<p><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em>Return Value</em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></p>
<blockquote>
<p><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em>Integer. Returns an identifier that cancels the evaluation with the <a target="_blank" href="http://hi.baidu.com/test/blog/item/69fa1a4cce6feff9d72afc07.html#">clearTimeout</a> method.</em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></p>
<p><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em>==============================================================</em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></p>
<p>以上内容摘自某本JScript教程(CHM格式,出处不详,跟原作者说声Sorry)</p>
<em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><br />
</em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em> 以下内容没抄任何人的,如果有雷同,估计不是你抄偶的就是巧合,嘿嘿.<em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><em><br />
</em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em>
<p>-------------------------------------------------------------------<br />
setTimeout( alert("3秒种过去了"), 3000);//调用一个函数,允许带常量参数<br />
-------------------------------------------------------------------<br />
&lt;script language="Javascript"&gt;<br />
//by zuoyang<br />
<br />
var x = 1;<br />
var y = 2;<br />
var z = 3;<br />
<br />
var sum;<br />
<br />
function Plus(a, b)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var z = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var i = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i = 0; i &lt; arguments.length; i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; z += arguments[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  setTimeout( function() {alert(z);}, 6000); //可以带变量参数的setTimeout调用形式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return z;<br />
}<br />
<br />
setTimeout( function(){ sum = Plus(x, y, z); }, 3000);/*除了可以带变量参数还可以获取返回值的setTimeout调用形式*/<br />
<br />
&lt;/script&gt;     </p>
<p>setInterval()的用法和setTimeout()是一样的:</p>
<pre><em>iTimerID</em> = <em>window</em><strong>.setInterval(</strong><em>vCode</em><strong>, </strong><em>iMilliSeconds</em><strong> [</strong><strong>, </strong><em>sLanguage</em><strong>]</strong><strong>)</strong></pre>
<p>不同的是setTimeout()是一次性作用,而setInterval()是每隔<em><em><em><em>iMilliSeconds</em></em></em></em>就执行一次<em><em><em>vCode.(</em></em></em>Evaluates an expression each time a specified number of milliseconds has elapsed)</p>
</blockquote></div>
<img src ="http://www.blogjava.net/sealyu/aggbug/307165.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-12-24 15:43 <a href="http://www.blogjava.net/sealyu/archive/2009/12/24/307165.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript CDATA的意义 </title><link>http://www.blogjava.net/sealyu/archive/2009/12/07/304961.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Mon, 07 Dec 2009 02:04:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/12/07/304961.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/304961.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/12/07/304961.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/304961.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/304961.html</trackback:ping><description><![CDATA[<p>CDATA 内部的所有东西都会被解析器忽略。</p>
<p>假如文本中包含了大量的 "&lt;" 和 "&amp;" 字符 - 就像编程代码中经常出现的情况一样 - 那么这个 XML 元素就可以被定义为一个 CDATA 部分。</p>
<p>CDATA 区段开始于 "&lt;![CDATA["，结束于 "]]&gt;"：</p>
<p><font color="#000000" size="2">&lt;script type="text/javascript"&gt;<br />
&lt;![CDATA[<br />
function compare(a,b)<br />
{<br />
if (a &lt; b)<br />
&nbsp;&nbsp; {alert("a小于b");}<br />
else if (a&gt;b)<br />
&nbsp;&nbsp; {alert("a大于b");}<br />
else<br />
&nbsp;&nbsp; {alert("a等于b");}<br />
}<br />
]]&gt;<br />
&lt;/script&gt;</font></p>
<p>在上面的例子中，在 CDATA 区段中的所有东西都会被解析器忽略。</p>
<p><br />
<strong>关于 CDATA 区段的注释:</strong></p>
<p>CDATA 区段不能包含字符串 "]]&gt;"，所以，CDATA 区段的嵌套是不被允许的。</p>
<p>同时也需要确保在 "]]&gt;" 字符串中没有空格或折行。</p>
<p><strong>为什么要使用CDATA:</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
XHTML的第二个改变是使用CDATA段。XML中的CDATA段用于声明不应被解析为标签的文本（XHTML也是如此），这样就可以使用特殊字符，如
小于（&lt;）、大于（&gt;）、和号（&amp;）和双引号（"），而不必使用它们的字符实体。考虑下面的代码：</p>
<p><font size="2">&lt;script type="text/javascript"&gt;<br />
function compare(a,b)<br />
{<br />
if (a &lt; b)<br />
&nbsp;&nbsp; {alert("a小于b");}<br />
else if (a&gt;b)<br />
&nbsp;&nbsp; {alert("a大于b");}<br />
else<br />
&nbsp;&nbsp; {alert("a等于b");}<br />
}<br />
&lt;/script&gt;</font></p>
<p>这个函数相当简单，它比较数字a和b，然后显示消息说明它们的关系。但是，在XHTML中，这段代码是无效的，因为它使用了三个特殊符号，即小于、
大于和双引号。要修正这个问题，必须分别用这三个字符的XML实体&amp;lt;、&amp;gt;和&amp;quot;替换它们：</p>
<p><font size="2">&lt;script type="text/javascript"&gt;<br />
function compare(a,b)<br />
{<br />
if (a &amp;lt;b)<br />
&nbsp;&nbsp; {alert(&amp;quot;a小于b&amp;quot;);}&nbsp;&nbsp; <br />
else if (a&amp;gt;b)<br />
&nbsp;&nbsp; {alert(&amp;quot;a大于b&amp;quot;);}<br />
else<br />
&nbsp;&nbsp; {alert(&amp;quot;a等于b&amp;quot;);}<br />
}<br />
&lt;/script&gt;</font></p>
<p>这段代码存在两个问题。首先，开发者不习惯用XML实体编写代码。这使代码很难读懂。其次，在JavaScript中，这种代码实际上将视为有语法
错，因为解释程序不知道XML实体的意思。用CDATA段即可以以常规形式（即易读的语法）编写JavaScript代码。正式加入CDATA段的方法如
下：</p>
<p><font size="2">&lt;script type="text/javascript"&gt;<br />
&lt;![CDATA[<br />
function compare(a,b)<br />
{<br />
if (a &lt; b)<br />
&nbsp;&nbsp; {alert("a小于b");}<br />
else if (a&gt;b)<br />
&nbsp;&nbsp; {alert("a大于b");}<br />
else<br />
&nbsp;&nbsp; {alert("a等于b");}<br />
}<br />
]]&gt;<br />
&lt;/script&gt;</font></p>
<p>虽然这是正式方式，但还要记住，大多数浏览器都不完全支持XHTML，这就带来主要问题，即这在JavaScript中是个语法错误，因为大多数浏览器还不认识CDATA段。</p>
<p><font size="2">&lt;script type="text/javascript"&gt;<br />
<font style="background-color: rgb(192, 192, 192);"><font style="background-color: rgb(192, 192, 192);">//&lt;![CDATA[</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
function compare(a,b)<br />
{<br />
if (a &lt; b)<br />
&nbsp;&nbsp; {alert("a小于b");}<br />
else if (a&gt;b)<br />
&nbsp;&nbsp; {alert("a大于b");}<br />
else<br />
&nbsp;&nbsp; {alert("a等于b");}<br />
}<br />
<font style="background-color: rgb(192, 192, 192);">//]]&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><br />
&lt;/script&gt;</font></p>
<p>当前使用的解决方案模仿了&#8220;对旧浏览器隐藏&#8221;代码的方法。使用单行的JavaScript注释"//"，可在不影响代码语法的情况下嵌入CDATA段：</p>
<p>现在，这段代码在不支持XHTML的浏览器中也可运行。</p>
<p>但是，为避免CDATA的问题，最好还是用外部文件引入JavaScript代码。</p>
<img src ="http://www.blogjava.net/sealyu/aggbug/304961.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-12-07 10:04 <a href="http://www.blogjava.net/sealyu/archive/2009/12/07/304961.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入认识javascript中的eval函数(转)</title><link>http://www.blogjava.net/sealyu/archive/2009/05/19/271465.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Tue, 19 May 2009 02:10:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/05/19/271465.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/271465.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/05/19/271465.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/271465.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/271465.html</trackback:ping><description><![CDATA[发现为本文起一个合适的标题还不是那么容易，呵呵，所以在此先说明下本文的两个目的：<br />
（1）介绍javascript中的eval函数的用法<br />
（2）如何在函数内执行全局代码
<div style="font-size: 10pt; position: relative;"><dd>
<div>►先来说eval的用法，内容比较简单，熟悉的可以跳过。<br />
eval函数接收一个参数s，如果s不是字符串，则直接返回s。否则执行s语句。如果s语句执行结果是一个值，则返回此值，否则返回undefined。<br />
需要特别注意的是对象声明语法&#8220;{}&#8221;并不能返回一个值，需要用括号括起来才会返回值，简单示例如下：</div>
<div js="">
<div style="color: #000000;"><font style="background-color: #fff8dc;"><font color="#0000ff">var</font>&nbsp;<font color="#000000">code1</font><font color="#000000">=</font><font color="#ff00ff">'"a"&nbsp;+&nbsp;2'</font><font color="#000000">;</font>&nbsp;&nbsp;&nbsp;&nbsp;</font><font style="background-color: #fff8dc;"><font color="#006600">//表达式<br />
</font><font color="#0000ff">var</font>&nbsp;<font color="#000000">code2</font><font color="#000000">=</font><font color="#ff00ff">'{a:2}'</font><font color="#000000">;</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font style="background-color: #fff8dc;"><font color="#006600">//语句<br />
</font><font color="#000000">alert</font><font color="#000000">(</font><font color="#0000ff">eval</font><font color="#000000">(</font><font color="#000000">code1</font><font color="#000000">));</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font style="background-color: #fff8dc;"><font color="#006600">//-&gt;'a2'<br />
</font><font color="#000000">alert</font><font color="#000000">(</font><font color="#0000ff">eval</font><font color="#000000">(</font><font color="#000000">code2</font><font color="#000000">));</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font style="background-color: #fff8dc;"><font color="#006600">//-&gt;undefined<br />
</font><font color="#000000">alert</font><font color="#000000">(</font><font color="#0000ff">eval</font><font color="#000000">(</font><font color="#ff00ff">'('</font>&nbsp;<font color="#000000">+</font>&nbsp;<font color="#000000">code2</font>&nbsp;<font color="#000000">+</font>&nbsp;<font color="#ff00ff">')'</font><font color="#000000">));</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#006600">//-&gt;[object&nbsp;Object]</font></font></div>
</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以看到，对于对象声明语句来说，仅仅是执行，并不能返回值。为了返回常用的&#8220;{}&#8221;这样的对象声明语句，必须用括号括住，以将其转换为表达式，才能返回其值。这也是使用<a href="http://www.x2blog.cn/supnate/?tid=3414" target="_blank">JSON</a>来进行Ajax开发的基本原理之一。在例子中可以清楚的看到，第二个alert语句输出的是undefined，而第三个加了括号后输出的是语句表示的对象。</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ►现在来说本文的重点，如何在函数内执行全局代码。为了说明这个问题，先看一个例子：</div>
<div js="" style="color: #000000;" align="left"><font style="background-color: #fffacd;"><font color="#0000ff">var</font>&nbsp;<font color="#000000">s</font><font color="#000000">=</font><font color="#ff00ff">'global'</font><font color="#000000">;</font>&nbsp;&nbsp;&nbsp;&nbsp;</font><font style="background-color: #fffacd;"><font color="#006600">//定义一个全局变量<br />
</font><font color="#0000ff">function</font>&nbsp;<font color="#000000">demo1</font><font color="#000000">(){</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">eval</font><font color="#000000">(</font><font color="#ff00ff">'var&nbsp;s="local"'</font><font color="#000000">);</font><br />
<font color="#000000">}</font><br />
<font color="#000000">demo1</font><font color="#000000">();</font><br />
<font color="#000000">alert</font><font color="#000000">(</font><font color="#000000">s</font><font color="#000000">);</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#006600">//-&gt;global</font></font></div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 很好理解，上面的demo1函数等价于：function demo1(){var s='local';}，其中定义了一个局部变量s。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所以最后的输出是global并不是什么奇怪的事情，毕竟大家都能很清楚的区分局部变量和全局变量。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 仔细体会一下，可以发现eval函数的特点，它总是在调用它的上下文变量空间（也称为：包，closure）内执行，无论是变量定义还是函数定义都是如此，所以如下的代码会产生函数未定义的错误：</div>
<div js="">
<div style="color: #000000;"><font style="background-color: #fff8dc;"><font color="#0000ff">var</font>&nbsp;<font color="#000000">s</font><font color="#000000">=</font><font color="#ff00ff">'function&nbsp;test(){return&nbsp;1;}'</font><font color="#000000">;</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font style="background-color: #fff8dc;"><font color="#006600">//一个函数定义语句<br />
</font><font color="#0000ff">function</font>&nbsp;<font color="#000000">demo2</font><font color="#000000">(){</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">eval</font><font color="#000000">(</font><font color="#000000">s</font><font color="#000000">);</font><br />
<font color="#000000">}</font><br />
<font color="#000000">demo2</font><font color="#000000">();</font><br />
<font color="#000000">alert</font><font color="#000000">(</font><font color="#000000">test</font><font color="#000000">());</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#006600">//-&gt;error:test&nbsp;is&nbsp;not&nbsp;defined</font></font></div>
</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这是因为test函数在局部空间定义，demo2函数内可以访问到，外面就访问不到了。</div>
<div><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 而在实际的Ajax开发中，有时我们需要从服务器动态获取代码来执行，以减轻一次载入代码过多的问题，或者是一些代码是通过Javascript自身生成的，希望用eval函数来使其执行。<br />
但这样的动态获取代码的工作一般在函数内完成，比如：</div>
<div js="">
<div style="color: #000000;"><font style="background-color: #fff8dc;"><font color="#0000ff">function</font>&nbsp;<font color="#000000">loadCode</font><font color="#000000">(){</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">var</font>&nbsp;<font color="#000000">code</font><font color="#000000">=</font><font color="#000000">getCode</font><font color="#000000">();</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">eval</font><font color="#000000">(</font><font color="#000000">code</font><font color="#000000">);</font><br />
<font color="#000000">}</font></font></div>
</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可见eval不可能在全局空间内执行，这就给开发带来了不少问题，也看到过很多人为此郁闷。</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不过现在偶终于找到了解决办法，嘿嘿，可以同时兼容IE和Firefox，方法如下：</div>
<div js="">
<div style="color: #000000;"><font style="background-color: #fff8dc;"><font color="#0000ff">var</font>&nbsp;<font color="#000000">X2</font><font color="#000000">={}</font>&nbsp;&nbsp;&nbsp;&nbsp;</font><font style="background-color: #fff8dc;"><font color="#006600">//my&nbsp;namespace:)<br />
</font><font color="#000000">X2</font><font color="#000000">.</font><font color="#000000">Eval</font><font color="#000000">=</font><font color="#0000ff">function</font><font color="#000000">(</font><font color="#000000">code</font><font color="#000000">){</font><br />
&nbsp;<font color="#0000ff">if</font><font color="#000000">(!!(</font><font color="#000000">window</font><font color="#000000">.</font><font color="#000000">attachEvent</font>&nbsp;<font color="#000000">&amp;&amp;</font>&nbsp;<font color="#000000">!</font><font color="#000000">window</font><font color="#000000">.</font><font color="#000000">opera</font><font color="#000000">)){</font><br />
&nbsp;&nbsp;</font><font style="background-color: #fff8dc;"><font color="#006600">//ie<br />
</font>&nbsp;&nbsp;<font color="#000000">execScript</font><font color="#000000">(</font><font color="#000000">code</font><font color="#000000">);</font>&nbsp;<br />
&nbsp;<font color="#000000">}</font><font color="#0000ff">else</font><font color="#000000">{</font><br />
&nbsp;&nbsp;</font><font style="background-color: #fff8dc;"><font color="#006600">//not&nbsp;ie<br />
</font>&nbsp;&nbsp;<font color="#000000">window</font><font color="#000000">.</font><font color="#0000ff">eval</font><font color="#000000">(</font><font color="#000000">code</font><font color="#000000">);</font><br />
&nbsp;<font color="#000000">}</font><br />
<font color="#000000">}</font></font></div>
</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 现在如果要想在函数内定义全局代码，就可以通过调用X2.Eval(code)方法，一个例子如下：</div>
<div js="">
<div style="color: #000000;"><font style="background-color: #fff8dc;"><font color="#0000ff">var</font>&nbsp;<font color="#000000">s</font><font color="#000000">=</font><font color="#ff00ff">'global'</font><font color="#000000">;</font><br />
<font color="#0000ff">function</font>&nbsp;<font color="#000000">demo3</font><font color="#000000">(){</font><br />
&nbsp;<font color="#000000">X2</font><font color="#000000">.</font><font color="#000000">Eval</font><font color="#000000">(</font><font color="#ff00ff">'var&nbsp;s="local"'</font><font color="#000000">);</font><br />
<font color="#000000">}</font><br />
<font color="#000000">demo3</font><font color="#000000">();</font><br />
<font color="#000000">alert</font><font color="#000000">(</font><font color="#000000">s</font><font color="#000000">);</font>&nbsp;<font color="#006600">//-&gt;'local'</font></font></div>
</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可见，在demo3函数内重新定义了全局变量s="local"。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需要注意的是X2.Eval并不返回值，如果要进行表达式的求值，还是用系统的eval函数。X2.Eval设计为仅做全局代码定义用。</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其实看到这里，或许有人感觉问题也太容易解决了点，呵呵，但发现这个办法倒是需要些运气和技巧的：<br />
（1）对于IE浏览器，默认已经提供了这样的函数：execScript，用于在全局空间执行代码，只是知道的人还不多。<br />
（2）对于Firefox浏览器，直接调用eval函数，则在调用者的空间执行；如果调用&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.eval则在全局空间执行。这个知道的人估计就更少了。毕竟alert(eval==window.eval)返回true！</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Firefox的eval函数的特点的确是很令人奇怪的，但从javascript规范中倒也能找到其来源：</div>
<div><font style="background-color: #ffefd5;">If value of the eval property is used in any way other than a direct call (that is, other than by the explicit use of its<br />
name as an Identifier which is the MemberExpression in a CallExpression), or if the eval property is assigned to,<br />
an EvalError exception may be thrown.</font></div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 意思大概就是说eval函数的执行是和调用者相关的，但并没有说其执行上下文的问题。所以IE和Firefox孰是孰非也就很难说了，大家知道解决办法就好。</div>
</dd>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><font style="background-color: #ffdab9;" color="#a9a9a9">原文地址：</font><a href="http://www.x2blog.cn/supnate/#sid.1735/page.1/"><font style="background-color: #808080;" color="#a9a9a9">[url]http://www.x2blog.cn/supnate/#sid.1735/page.1/[/url]</font></a></div>
</div>
<img src ="http://www.blogjava.net/sealyu/aggbug/271465.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-05-19 10:10 <a href="http://www.blogjava.net/sealyu/archive/2009/05/19/271465.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在XHTML中使用javascript</title><link>http://www.blogjava.net/sealyu/archive/2009/05/13/270406.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Wed, 13 May 2009 06:28:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/05/13/270406.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/270406.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/05/13/270406.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/270406.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/270406.html</trackback:ping><description><![CDATA[今天在xhtml中使用javascript时一直报错，后来才发现在xhtml中javacript里使用'&lt;' '&amp;'是不合法的。<br />
<div>
<p ss-cic="">Making JavaScript Compatible with XHTML</p>
</div>
<p>XHTML is subject to the same syntactical rules as XML. Because of this,  an
XHTML processor treats the characters &lt; and &amp;  as markup, even if they reside  inside a &lt;script&gt; block. Since the &lt; and &amp;
characters are also used by the JavaScript language, this creates a conflict. When an
XHTML processor sees these characters within the JavaScript code of a &lt;script&gt; block, it attempts to parse the JavaScript code as if it were markup, which causes the  XHTML parser to fail.</p>
<p>You can get around this conflict and make all JavaScript code compatible with XHTML by placing the  JavaScript code within a CDATA section. A CDATA section in XML/XHTML starts with the
characters &lt;![CDATA[ and ends with the characters ]]&gt;.</p>
<p>
Any characters within the starting and ending element of a CDATA section are not treated by the XML/XHTML processor as markup, thus preventing a conflict. </p>
<p> Here is an example of how to declare JavaScript code within a CDATA section so that it is
compatible with XHTML:</p>
<span>
&lt;script type="text/javascript"&gt;<br />
//&lt;![CDATA[<br />
<br />
alert("&lt;This is compatible with XHTML&gt;");<br />
<br />
//]]&gt;<br />
&lt;/script&gt;
</span>
<p>
Note that JavaScript source code must be placed within the opening and closing elements of the CDATA section. The CDATA section itself should be commented out with a JavaScript single-line comment // as in the example above. This is so that the JavaScript
interrupter does not interpret the CDATA markup as JavaScript, which would cause a JavaScript error.</p>
<p>JavaScript code that is imported into an XHTML document from an external source file is always
compatible with XHTML. So, for example, any code you place into the external file external.js and import into an
XHTML file via the src attribute of the &lt;script&gt; tag will be valid. Here is an example of how to import the file external.js:</p>
&lt;script type="text/javascript" src="external.js"&gt;&lt;/script&gt;<br />
<br />
<div>
<h1 id="title">在XHTML文档中合适的使用CSS和JavaScript</h1>
</div>
<div id="pageToc">
<div>
<h5>内容表格</h5>
<ol style="list-style-type: none; margin-left: 0px; padding-left: 0px;">
    <li>1. <a href="https://developer.mozilla.org/cn/%e5%9c%a8XHTML%e6%96%87%e6%a1%a3%e4%b8%ad%e5%90%88%e9%80%82%e7%9a%84%e4%bd%bf%e7%94%a8CSS%e5%92%8cJavaScript#XHTML.e6.98.afXML.2c.e4.b8.8d.e6.98.afHTML" rel="internal"> XHTML是XML,不是HTML </a></li>
    <li>2. <a href="https://developer.mozilla.org/cn/%e5%9c%a8XHTML%e6%96%87%e6%a1%a3%e4%b8%ad%e5%90%88%e9%80%82%e7%9a%84%e4%bd%bf%e7%94%a8CSS%e5%92%8cJavaScript#.e5.9c.a8.e5.86.85.e5.b5.8c.e7.9a.84style.e5.92.8cscript.e4.b8.ad.e5.87.ba.e7.8e.b0.e7.9a.84.e9.97.ae.e9.a2.98" rel="internal"> 在内嵌的style和script中出现的问题 </a>
    <ol style="list-style-type: none; margin-left: 0px; padding-left: 15px;">
        <li>2.1. <a href="https://developer.mozilla.org/cn/%e5%9c%a8XHTML%e6%96%87%e6%a1%a3%e4%b8%ad%e5%90%88%e9%80%82%e7%9a%84%e4%bd%bf%e7%94%a8CSS%e5%92%8cJavaScript#JavaScript.e4.b8.ad.e5.8c.85.e5.90.ab.e4.ba.86.e4.b8.80.e4.ba.9b.e5.9c.a8XHTML.e4.b8.ad.e4.b8.8d.e5.85.81.e8.ae.b8.e5.ad.98.e5.9c.a8.e7.9a.84.e5.ad.97.e7.ac.a6" rel="internal"> JavaScript中包含了一些在XHTML中不允许存在的字符 </a></li>
        <li>2.2. <a href="https://developer.mozilla.org/cn/%e5%9c%a8XHTML%e6%96%87%e6%a1%a3%e4%b8%ad%e5%90%88%e9%80%82%e7%9a%84%e4%bd%bf%e7%94%a8CSS%e5%92%8cJavaScript#.e5.9c.a8.e5.86.85.e5.b5.8c.e7.9a.84style.e5.92.8cscript.e4.b8.ad.e4.bd.bf.e7.94.a8.e6.b3.a8.e9.87.8a" rel="internal"> 在内嵌的style和script中使用注释 </a></li>
        <li>2.3. <a href="https://developer.mozilla.org/cn/%e5%9c%a8XHTML%e6%96%87%e6%a1%a3%e4%b8%ad%e5%90%88%e9%80%82%e7%9a%84%e4%bd%bf%e7%94%a8CSS%e5%92%8cJavaScript#.e5.8c.85.e5.90.ab.e5.8f.8c.e6.a8.aa.e7.ba.bf.e7.9a.84.e5.86.85.e5.b5.8cstyle.e5.92.8cscript" rel="internal"> 包含双横线的内嵌style和script </a></li>
        <li>2.4. <a href="https://developer.mozilla.org/cn/%e5%9c%a8XHTML%e6%96%87%e6%a1%a3%e4%b8%ad%e5%90%88%e9%80%82%e7%9a%84%e4%bd%bf%e7%94%a8CSS%e5%92%8cJavaScript#.e4.bd.bf.e7.94.a8CDATA.e6.9b.bf.e4.bb.a3.e6.b3.a8.e9.87.8a" rel="internal"> 使用CDATA替代注释 </a></li>
    </ol>
    </li>
    <li>3. <a href="https://developer.mozilla.org/cn/%e5%9c%a8XHTML%e6%96%87%e6%a1%a3%e4%b8%ad%e5%90%88%e9%80%82%e7%9a%84%e4%bd%bf%e7%94%a8CSS%e5%92%8cJavaScript#.e4.be.8b.e5.ad.90" rel="internal"> 例子 </a>
    <ol style="list-style-type: none; margin-left: 0px; padding-left: 15px;">
        <li>3.1. <a href="https://developer.mozilla.org/cn/%e5%9c%a8XHTML%e6%96%87%e6%a1%a3%e4%b8%ad%e5%90%88%e9%80%82%e7%9a%84%e4%bd%bf%e7%94%a8CSS%e5%92%8cJavaScript#.e5.9c.a8.e6.b3.a8.e9.87.8a.e4.b8.ad.e4.bd.bf.e7.94.a8.e5.86.85.e5.b5.8cstyle.e7.9a.84CSS.e8.a7.84.e5.88.99" rel="internal"> 在注释中使用内嵌style的CSS规则 </a></li>
        <li>3.2. <a href="https://developer.mozilla.org/cn/%e5%9c%a8XHTML%e6%96%87%e6%a1%a3%e4%b8%ad%e5%90%88%e9%80%82%e7%9a%84%e4%bd%bf%e7%94%a8CSS%e5%92%8cJavaScript#.e4.bd.bf.e7.94.a8.e5.a4.96.e9.83.a8.e6.96.87.e4.bb.b6.e7.9a.84CSS.e8.a7.84.e5.88.99" rel="internal"> 使用外部文件的CSS规则 </a></li>
    </ol>
    </li>
    <li>4. <a href="https://developer.mozilla.org/cn/%e5%9c%a8XHTML%e6%96%87%e6%a1%a3%e4%b8%ad%e5%90%88%e9%80%82%e7%9a%84%e4%bd%bf%e7%94%a8CSS%e5%92%8cJavaScript#.e5.bb.ba.e8.ae.ae" rel="internal"> 建议 </a>
    <ol style="list-style-type: none; margin-left: 0px; padding-left: 15px;">
        <li>4.1. <a href="https://developer.mozilla.org/cn/%e5%9c%a8XHTML%e6%96%87%e6%a1%a3%e4%b8%ad%e5%90%88%e9%80%82%e7%9a%84%e4%bd%bf%e7%94%a8CSS%e5%92%8cJavaScript#.e4.b8.8d.e8.a6.81.e5.9c.a8XHTML.e4.b8.ad.e5.86.85.e8.81.94style.e6.88.96script" rel="internal"> 不要在XHTML中内联style或script </a></li>
        <li>4.2. <a href="https://developer.mozilla.org/cn/%e5%9c%a8XHTML%e6%96%87%e6%a1%a3%e4%b8%ad%e5%90%88%e9%80%82%e7%9a%84%e4%bd%bf%e7%94%a8CSS%e5%92%8cJavaScript#.e7.90.86.e8.a7.a3XHTML_1.0.e7.9a.84HTML.e5.85.bc.e5.ae.b9.e6.8c.87.e5.af.bc" rel="internal"> 理解XHTML 1.0的HTML兼容指导 </a></li>
    </ol>
    </li>
    <li>5. <a href="https://developer.mozilla.org/cn/%e5%9c%a8XHTML%e6%96%87%e6%a1%a3%e4%b8%ad%e5%90%88%e9%80%82%e7%9a%84%e4%bd%bf%e7%94%a8CSS%e5%92%8cJavaScript#.e5.8e.9f.e5.a7.8b.e6.96.87.e6.a1.a3.e4.bf.a1.e6.81.af" rel="internal"> 原始文档信息 </a></li>
</ol>
</div>
</div>
<p><a rel="external nofollow" target="_blank" href="http://www.w3.org/TR/xhtml1" title="http://www.w3.org/TR/xhtml1">XHTML&#8482; 1.0 The Extensible HyperText Markup Language (Second Edition)</a> 定义XHTML是为了把HTML 4扩展成像XML 1.0一样的应用程序。
</p>
<p>在许多站点中XHTML正在迅速的替代HTML 4；然而，主流浏览器对完全支持XHTML方面表现得不足，和网页设计师对HTML 4与XHTML的基本差异缺乏理解，产生了当今网络上的一个不断扩大的问题。 </p>
<div id="section_1">
<h3> XHTML是XML,不是HTML </h3>
<p>其中关于XHTML的主要的误解是，它仅仅是另外一个版本的HTML。这个误解产生于这样的事实：Microsoft&#174; Internet Explorer只在文件以Mime类型为 text/html提交时，才支持XHTML，而标准中建议的类型其实是<tt>application/xhtml+xml</tt>。
</p>
<p>当一个XHTML页面的MIME类型被提交为<tt>text/html</tt>时，它被所有的浏览器当作HTML处理，就好像XHTML比起HTML来没有任何不同。但是当一个XHTML页面的MIME类型被提交为<tt>text/xml</tt>或<tt>application/xhtml+xml</tt>时，它将被当作XML文档处理，而设计和显示XML都是必须要遵守严格规则的。
</p>
<p>真正的XHTML就是一个XML的应用，所以创建XHTML时也要遵守严格的规则。特别是：
</p>
<ol>
    <li>未经过处理的<tt>&lt;</tt>和<tt>&amp;</tt>不允许出现在CDATA区域（<tt>&lt;!CDATA<a rel="internal" href="https://developer.mozilla.org/cn/..." class="new">...</a>&gt;</tt>）之外。
    </li>
    <li>注释(<tt>&lt;!—— ... ——&gt;</tt>)中不能包含双横线。
    </li>
    <li>包含在注释(<tt>&lt;!—— ... ——&gt;</tt>)中的内容将被忽略。
    </li>
</ol>
</div>
<div id="section_2">
<h3> 在内嵌的<tt>style</tt>和<tt>script</tt>中出现的问题 </h3>
<p>在被当作XML而不是HTML处理时，内嵌的style和script标记会产生几个不同的问题。
</p>
<div id="section_3">
<h4> JavaScript中包含了一些在XHTML中不允许存在的字符 </h4>
<p>典型的JavaScript中包含了一些特殊字符，这些字符在XHTML中是不允许放在CDATA区域之外的。
</p>
<pre>&lt;script type="text/javascript"&gt;<br />
<br />
var i = 0;<br />
<br />
<br />
<br />
while (++i &lt; 10)<br />
<br />
{<br />
<br />
// ...<br />
<br />
}<br />
<br />
&lt;/script&gt;<br />
<br />
</pre>
<p>注意这个<a rel="internal" href="https://developer.mozilla.org/cn/Properly_Using_CSS_and_JavaScript_in_XHTML_Documents/Examples#Problem_1">例子</a><strong>不是以正确格式书写的XHTML</strong>，因为使用了未经处理的&#8220;&lt;&#8221;，它只能在被当作XHTML或XML标记的一部分时出现。
</p>
</div>
<div id="section_4">
<h4> 在内嵌的<tt>style</tt>和<tt>script</tt>中使用注释 </h4>
<p>熟悉HTML的设计师通常把内嵌的<tt>style</tt>和<tt>script</tt>内容放到注释中，这样可以在不支持样式和脚本的浏览器中隐藏它们。
</p>
<pre>&lt;style type="text/css"&gt;<br />
<br />
&lt;!--<br />
<br />
body {background-color: blue; color: yellow;}<br />
<br />
--&gt;<br />
<br />
&lt;/style&gt;<br />
<br />
&lt;script type="text/javascript"&gt;<br />
<br />
&lt;!--<br />
<br />
var i = 0;<br />
<br />
var sum = 0;<br />
<br />
<br />
<br />
for (i = 0; i &lt; 10; ++i)<br />
<br />
{<br />
<br />
sum += i;<br />
<br />
}<br />
<br />
alert('sum = ' + sum);<br />
<br />
// --&gt;<br />
<br />
&lt;/script&gt;<br />
<br />
</pre>
<p>这个<a rel="internal" href="https://developer.mozilla.org/cn/Properly_Using_CSS_and_JavaScript_in_XHTML_Documents/Examples#Problem_2">例子</a>举例说明了特定的浏览器可以忽略注释里的内容。另外，这个例子还显示了不同的浏览器在处理<tt>text/xml</tt>或者 <tt>application/xhtml+xml</tt>内容时产生的不同问题。
</p>
<dl><dt> Mozilla 1.1+/Opera 7
</dt><dd> 不能使用CSS，也不能执行JavaScript。
</dd><dt> Netscape 7.0x/Mozilla 1.0.x
</dt><dd> 不能使用CSS，但可以执行JavaScript。
</dd><dt> Internet Explorer 5.5+
</dt><dd> 无法正常显示文档。
</dd></dl>
</div>
<div id="section_5">
<h4> 包含双横线的内嵌<tt>style</tt>和<tt>script</tt> </h4>
<p>另一个把JavaScript包含在XHTML文件的注释中产生的<a rel="internal" href="https://developer.mozilla.org/cn/Properly_Using_CSS_and_JavaScript_in_XHTML_Documents/Examples#Problem_3">问题</a>，与在XHTML的注释中使用双横线会产生的问题一样。
</p>
<pre>&lt;script type="text/javascript"&gt;<br />
<br />
&lt;!--<br />
<br />
var i;<br />
<br />
var sum = 0;<br />
<br />
<br />
<br />
for (i = 10; i &gt; 0; --i)<br />
<br />
{<br />
<br />
sum += i;<br />
<br />
}<br />
<br />
// --&gt;<br />
<br />
&lt;/script&gt;<br />
<br />
</pre>
</div>
<div id="section_6">
<h4> 使用CDATA替代注释 </h4>
<p>直接把JavaScript放入CDATA区域会在低版本不支持XML的浏览器中产生问题，不过，把JavaScript的注释(//&#8230;&#8230;)与CDATA一起使用，就能解决向下兼容的问题了。
</p>
<pre>&lt;script type="text/javascript"&gt;<br />
<br />
//&lt;![CDATA[<br />
<br />
var i = 0;<br />
<br />
<br />
<br />
while  (++i &lt; 10)<br />
<br />
{<br />
<br />
// ...<br />
<br />
}<br />
<br />
//]]&gt;<br />
<br />
&lt;/script&gt;<br />
<br />
</pre>
</div>
</div>
<div id="section_7">
<h3> 例子 </h3>
<div id="section_8">
<h4> 在注释中使用内嵌<tt>style</tt>的CSS规则 </h4>
<dl><dt> <a rel="internal" href="https://developer.mozilla.org/cn/Properly_Using_CSS_and_JavaScript_in_XHTML_Documents/Examples#Example_1">例子1</a> - XHTML 1.0 Strict在<tt>text/html</tt>
</dt><dd> 这个<a rel="internal" href="https://developer.mozilla.org/cn/Properly_Using_CSS_and_JavaScript_in_XHTML_Documents/Examples#Example_1">例子</a>举例说明当CSS规则包含内联和包含在注释中时的XHTML在<tt>text/html</tt>的行为。这个例子支持Netscape 7.x，Mozilla，Opera 7和Internet Explorer 5.5+那一个都能像期望一样应用CSS规则。 </dd></dl>
<dl><dt> <a rel="internal" href="https://developer.mozilla.org/cn/Properly_Using_CSS_and_JavaScript_in_XHTML_Documents/Examples#Example_2">例子2</a> - XHTML 1.0 Strict在<tt>text/xml</tt>
</dt><dd> 这个<a rel="internal" href="https://developer.mozilla.org/cn/Properly_Using_CSS_and_JavaScript_in_XHTML_Documents/Examples#Example_2">例子</a>举例说明当CSS规则包含内联和包含在注释中时的XHTML在<tt>text/xml</tt>的行为。这个例子支持Netscape 7.x，Mozilla，Opera 7但<strong>不支持Internet Explorer 5.5+</strong>。注意etscape 7.x，Mozilla和Opera同意包含在注释的内联CSS规则将被忽略。
</dd></dl>
<dl><dt> <a rel="internal" href="https://developer.mozilla.org/cn/Properly_Using_CSS_and_JavaScript_in_XHTML_Documents/Examples#Example_3">例子3</a> - XHTML 1.0 Strict在<tt>application/xhtml+xml</tt>
</dt><dd> 这个<a rel="internal" href="https://developer.mozilla.org/cn/Properly_Using_CSS_and_JavaScript_in_XHTML_Documents/Examples#Example_3">例子</a>举例说明当CSS规则包含内联和包含在注释中时的XHTML在<tt>application/xhtml+xml</tt>的行为。这个例子支持Netscape 7.x，Mozilla，Opera 7但<strong>不支持Internet Explorer 5.5+</strong>。注意etscape 7.x，Mozilla和Opera同意包含在注释的内联CSS规则将被忽略。
</dd></dl>
</div>
<div id="section_9">
<h4> 使用外部文件的CSS规则 </h4>
<dl><dt> <a rel="internal" href="https://developer.mozilla.org/cn/Properly_Using_CSS_and_JavaScript_in_XHTML_Documents/Examples#Example_4">例子4</a> - XHTML 1.0 Strict在<tt>text/html</tt>
</dt><dd> 这个<a rel="internal" href="https://developer.mozilla.org/cn/Properly_Using_CSS_and_JavaScript_in_XHTML_Documents/Examples#Example_4">例子</a>举例说明当在使用外部文件的CSS规则的时候XHTML在<tt>text/html</tt>的行为。这个例子支持Netscape 7.x，Mozilla，Opera 7和Internet Explorer 5.5+。
</dd></dl>
<dl><dt> <a rel="internal" href="https://developer.mozilla.org/cn/Properly_Using_CSS_and_JavaScript_in_XHTML_Documents/Examples#Example_5">例子5</a> - XHTML 1.0 Strict在<tt>text/xml</tt>
</dt><dd>这个<a rel="internal" href="https://developer.mozilla.org/cn/Properly_Using_CSS_and_JavaScript_in_XHTML_Documents/Examples#Example_5">例子</a>举例说明当在使用外部文件的CSS规则的时候XHTML在<tt>text/xml</tt>的行为。这个例子支持Netscape 7.x，Mozilla和Opera 7但不支持<strong>不支持Internet Explorer 5.5+</strong>。
</dd></dl>
<dl><dt> <a rel="internal" href="https://developer.mozilla.org/cn/Properly_Using_CSS_and_JavaScript_in_XHTML_Documents/Examples#Example_6">例子6</a> - XHTML 1.0 Strict在<tt>application/xhtml+xml</tt>
</dt><dd> 这个<a rel="internal" href="https://developer.mozilla.org/cn/Properly_Using_CSS_and_JavaScript_in_XHTML_Documents/Examples#Example_6">例子</a>举例说明当在使用外部文件的CSS规则的时候XHTML在<tt>application/xhtml+xml</tt>的行为。这个例子支持Netscape 7.x，Mozilla和Opera 7但不支持<strong>不支持Internet Explorer 5.5+</strong>。
</dd></dl>
</div>
</div>
<h3> 建议 </h3>
<div id="section_11">
<h4> 不要在XHTML中内联<tt>style</tt>或<tt>script</tt> </h4>
<p>用外部文件包含CSS规则和JavaScript来替换内联样式和脚本是创建XHTML最佳方式，在向后兼容方式时，如果内容的MIME类型从<tt>text/html</tt>向<tt>application/xhtml+xml</tt>改变时将不会被打断。
</p>
<p>这个建议可能看起来更强烈，可是，它是未来XHTML要打算的问题，当XHTML在<tt>text/html</tt>向<tt>application/xhtml+xml</tt>转移在几年后发生。
</p>
<p>如果你仅仅测试你的XHTML在<tt>text/html</tt>的时候，那么你可能产生问题，例如像：不能准确的描述出主题。移动CSS和JavaScript到单独的文件是可靠的方法，关于改变你XHTML的服务方式。
</p>
</div>
<h4> 理解XHTML 1.0的HTML兼容指导 </h4>
<p>这个XHTML 1.0 <a rel="external nofollow" target="_blank" href="http://www.w3.org/TR/xhtml1/#guidelines" title="http://www.w3.org/TR/xhtml1/#guidelines">HTML Compatibility Guidelines</a>帮助创建XHTML文档向后兼容性在那些不能理解XML的老浏览器。
</p>
<p>请注意那是纯粹的XHTML文档，你不需要使用xml-stylesheet处理指导，但应该使用<tt>link</tt>涉及的外部文件包含CSS。
</p>
<br />
<br />
另外，附XHTML的一些规范：<br />
1.所有的标记都必须要有一个相应的结束标记<br />
以前在&nbsp;HTML&nbsp;中,你可以打开许多标签,例
如&nbsp;&lt;p&gt;&nbsp;和&nbsp;&lt;li&gt;&nbsp;而不一定写对应的&nbsp;&lt;/p&gt;&nbsp;和&nbsp;&lt;/li&gt;&nbsp;来关闭它们.但
在&nbsp;XHTML&nbsp;中这是不合法的.XHTML要求有严谨的结构,所有标签必须关闭.如果是单独不成对的标签,在标签最后加一个&nbsp;"/"&nbsp;来关闭它.例如:<br />
&lt;br&nbsp;/&gt;&lt;img&nbsp;height="80"&nbsp;alt="网页设计师"&nbsp;src="<a target="_blank" href="http://images/logo_w3cn_200x80.gif%22%C2%A0width=%22200%22%C2%A0/%3E%C2%A0">http://images/logo_w3cn_200x80.gif"&amp;n ... 00"&nbsp;/&gt;&nbsp;</a><br />
<br />
2.所有标签的元素和属性的名字都必须使用小写<br />
与&nbsp;HTML&nbsp;不
一样,XHTML&nbsp;对大小写是敏感的,&lt;title&gt;&nbsp;和&nbsp;&lt;TITLE&gt;&nbsp;是不同的标签.XHTML&nbsp;要求所有的标签和属性的
名字都必须使用小写.例如:&lt;BODY&gt;&nbsp;必须写成&nbsp;&lt;body&gt;&nbsp;.大小写夹杂也是不被认可的,通
常&nbsp;dreamweaver&nbsp;自动生成的属性名字&nbsp;"onMouseOver"&nbsp;也必须修改成&nbsp;"onmouseover".<br />
<br />
3.所有的&nbsp;XML&nbsp;标记都必须合理嵌套<br />
同样因为&nbsp;XHTML&nbsp;要求有严谨的结构,因此所有的嵌套都必须按顺序,以前我们这样写的代码:<br />
&lt;p&gt;&lt;b&gt;&lt;/p&gt;&lt;/b&gt;&nbsp;<br />
必须修改为:<br />
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&nbsp;<br />
就是说,一层一层的嵌套必须是严格对称.<br />
<br />
4.所有的属性必须用引号&nbsp;""&nbsp;括起来<br />
在&nbsp;HTML&nbsp;中,你可以不需要给属性值加引号,但是在&nbsp;XHTML&nbsp;中,它们必须被加引号.例如:<br />
&lt;height=80&gt;&nbsp;<br />
必须修改为:<br />
&lt;height="80"&gt;&nbsp;<br />
特殊情况,你需要在属性值里使用双引号,你可以用&nbsp;",单引号可以使用&nbsp;&amp;apos;,例如:<br />
&lt;alt="say&amp;apos;hello&amp;apos;"&gt;&nbsp;<br />
<br />
<br />
5.把所有&nbsp;&lt;&nbsp;和&nbsp;&amp;&nbsp;特殊符号用编码表示<br />
任何小于号（&lt;）,不是标签的一部分,都必须被编码为&nbsp;&amp;lt;<br />
任何大于号（&gt;）,不是标签的一部分,都必须被编码为&nbsp;&amp;gt;<br />
任何与号（&amp;）,不是实体的一部分的,都必须被编码为&nbsp;&amp;amp;<br />
<br />
6.给所有属性赋一个值<br />
XHTML&nbsp;规定所有属性都必须有一个值,没有值的就重复本身.例如:<br />
&lt;td&nbsp;nowrap&gt;&nbsp;&lt;input&nbsp;type="checkbox"&nbsp;name="shirt"&nbsp;value="medium"&nbsp;checked&gt;&nbsp;<br />
必须修改为:<br />
&lt;td&nbsp;nowrap="nowrap"&gt;&nbsp;&lt;input&nbsp;type="checkbox"&nbsp;name="shirt"&nbsp;value="medium"&nbsp;checked="checked"&nbsp;/&gt;&nbsp;<br />
<br />
7.不要在注释内容中使用&nbsp;"--","--"&nbsp;只能发生在&nbsp;XHTML&nbsp;注释的开头和结束,也就是说,在内容中它们不再有效.例如下面的代码是无效的:<br />
&lt;!--这里是注释-----------这里是注释--&gt;&nbsp;<br />
用等号或者空格替换内部的虚线:<br />
&lt;!--这里是注释============这里是注释--&gt;&nbsp;<br />
<br />
以上这些规范有的看上去比较奇怪,但这一切都是为了使我们的代码有一个统一、唯一的标准,便于以后的数据再利用.<br />
<br />
<img src ="http://www.blogjava.net/sealyu/aggbug/270406.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-05-13 14:28 <a href="http://www.blogjava.net/sealyu/archive/2009/05/13/270406.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript 判断某页面上的表单数据是否改变过 (转)</title><link>http://www.blogjava.net/sealyu/archive/2009/05/13/270347.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Wed, 13 May 2009 02:02:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/05/13/270347.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/270347.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/05/13/270347.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/270347.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/270347.html</trackback:ping><description><![CDATA[<div>
<p><span style="font-size: 10pt;">本文转自：</span><a target="_blank" href="http://info.codepub.com/2008/09/info-22582.html"><span style="font-size: 10pt;"><span style="color: rgb(0, 153, 51);">http://info.codepub.com/2008/09/info-22582.html</span></span></a></p>
<p><span style="font-size: 10pt;">原文如下：</span></p>
<div id="postmessage_2830" class="t_msgfont"><span style="font-size: 10pt;">使用场合：当某个页面数据修改时，需要执行某些操作时&nbsp; &nbsp;<br />
在页面的body加载事件（onload）中加上initFileds()就可以记录页面的初始数据<br />
在需要判断页面数据是否改变时调用checkModification()方法就可判断数据是否改变<br />
返回值为true就是已经改变<br />
返回值为false就是没有改变<br />
&nbsp; &nbsp;<br />
&nbsp; &nbsp; // 页面编辑数据<br />
&nbsp; &nbsp; var inputsData;<br />
&nbsp; &nbsp; var textareasData;<br />
&nbsp; &nbsp; var selectsData;<br />
&nbsp; &nbsp; // 记录下表单中的原始值<br />
&nbsp; &nbsp; function initFileds() {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;var inputs = document.getElementsByTagName("input");<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;var textareas = document.getElementsByTagName("textarea");<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;var selects = document.getElementsByTagName("select");<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;inputsData = new Array(inputs.length);<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;for (var i=0;i&lt;inputs.length;i++) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;inputsData[i] = inputs[i].value;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if (inputs[i].type=="radio") {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; inputsData[i]=inputs[i].checked;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;}<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;textareasData = new Array(textareas.length);<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;for (var i=0;i&lt;textareas.length;i++) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;textareasData[i] = textareas[i].value;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;selectsData = new Array(selects.length);<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;for (var i=0;i&lt;selects.length;i++) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;selectsData[i] = selects[i].value;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; /*<br />
&nbsp; &nbsp;&nbsp;&nbsp;* 判断表单中值是否被修改了<br />
&nbsp; &nbsp;&nbsp;&nbsp;* submitCommand 表单有改动时,执行的javascript代码<br />
&nbsp; &nbsp;&nbsp;&nbsp;*/<br />
&nbsp; &nbsp; function checkModification(submitCommand) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;var inputs = document.getElementsByTagName("input");<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;var textareas = document.getElementsByTagName("textarea");<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;var selects = document.getElementsByTagName("select");<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;var hasBeenChanged = false;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;for (var i=0;i&lt;inputs.length;i++) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if (inputs[i].type=="radio"&amp;&amp;(inputs[i].checked!=inputsData[i])) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; hasBeenChanged = true;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; inputsData[i]=inputs[i].checked;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;}<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if (inputs[i].type!="radio"&amp;&amp;inputsData[i]!=inputs[i].value) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; if(inputs[i].name!="actionType"){<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;hasBeenChanged = true;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; }<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; inputsData[i]=inputs[i].value;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;}<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;for (var i=0;i&lt;textareas.length;i++) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if (textareasData[i]!=textareas[i].value) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; hasBeenChanged = true;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; textareasData[i]=textareas[i].value;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;}<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;for (var i=0;i&lt;selects.length;i++) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if (selectsData[i]!=selects[i].value) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; hasBeenChanged = true;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; selectsData[i]=selects[i].value;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;}<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if (hasBeenChanged&amp;&amp;confirm("数据已经改变,是否保存？")) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; eval(submitCommand);<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;}<br />
&nbsp; &nbsp; }</span></div>
</div>
<img src ="http://www.blogjava.net/sealyu/aggbug/270347.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-05-13 10:02 <a href="http://www.blogjava.net/sealyu/archive/2009/05/13/270347.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>10个基于 JavaScript 的 WYSIWYG 编辑器(转)</title><link>http://www.blogjava.net/sealyu/archive/2009/04/27/267680.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Mon, 27 Apr 2009 02:23:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/04/27/267680.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/267680.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/04/27/267680.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/267680.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/267680.html</trackback:ping><description><![CDATA[<p><a href="http://www.comsharp.com/">COMSHARP CMS</a> 写道：在线编辑内容的时候，那些基于 JavaScript 的编辑器帮了我们大忙，这些所见即所得（WYSIWYG）编辑器，给我们提供了类似
Office&nbsp;的操作体验。如今，任何网站内容管理系统（CMS）和博客系统都需要一个这样的编辑器。本文精选了10个基于 JavaScript&nbsp;
的编辑器，它们有的是基于 jQuery 框架，有点则不是。</p>
<h2>MarkitUp - jQuery</h2>
<p><strong><a href="http://markitup.jaysalvat.com/home/">Official Website</a></strong> | <strong><a href="http://markitup.jaysalvat.com/examples/">Demo</a></strong><br />
<img src="http://www.queness.com/resources/images/richtexteditor/markitup.gif" alt="MarkitUp" height="150" width="600" /></p>
<p>功能不是很多，但很轻量，很灵活。打包后只有6.5K大小。</p>
<h2>jWYSIWYG - jQuery</h2>
<p><strong><a href="http://code.google.com/p/jwysiwyg/">Official Website</a></strong> | <strong><a href="http://code.google.com/p/jwysiwyg/">Demo</a></strong><br />
<img src="http://www.queness.com/resources/images/richtexteditor/jwysiwyg.gif" alt="jWYSIWYG" height="150" width="600" /></p>
<p>非常基本的编辑器，简单为本。打包后只有7K。</p>
<h2>Lightweight RTE- jQuery</h2>
<p><strong><a href="http://batiste.dosimple.ch/blog/posts/2007-09-11-1/rich-text-editor-jquery.html">Official Website</a></strong> | <strong><a href="http://batiste.dosimple.ch/blog/posts/2007-09-11-1/rich-text-editor-jquery.html">Demo</a></strong><br />
<img src="http://www.queness.com/resources/images/richtexteditor/lightweightrte.gif" alt="jWYSIWYG" height="150" width="600" /></p>
<p>简单到不能再简单，很容易自己修改。</p>
<h2>HTMLBox - jQuery</h2>
<p><strong><a href="http://remiya.com/cms/projects/jquery-plugins/htmlbox/">Official Website</a></strong> | <strong><a href="http://remiya.com/cms/projects/jquery-plugins/htmlbox/demo_full.html">Demo</a></strong><br />
<img src="http://www.queness.com/resources/images/richtexteditor/htmlbox.gif" alt="HTMLBox" height="150" width="600" /></p>
<p>跨浏览器，开源，基于 jQuery。可以很容易同各种 CMS，论坛，留言本，博客等系统集成。</p>
<h2>D Small Rich Text Editor - jQuery</h2>
<p><strong><a href="http://www.avidansoft.com/dsrte/index.php">Official Website</a></strong> | <strong><a href="http://www.avidansoft.com/dsrte/index.php">Demo</a></strong><br />
<img src="http://www.queness.com/resources/images/richtexteditor/dsrte.gif" alt="D Small Rich Text Editor" height="150" width="600" /></p>
<p>基于 iframe 对象。</p>
<h2>WYMEditor - jQuery</h2>
<p><strong><a href="http://www.wymeditor.org/demo/">Official Website</a></strong> | <strong><a href="http://files.wymeditor.org/wymeditor/trunk/src/examples/13-silver-skin.html">Demo</a></strong><br />
<img src="http://www.queness.com/resources/images/richtexteditor/wymeditor.gif" alt="WYMEditor" height="150" width="600" /></p>
&lt;!-- ################## NON jQUery  ################### --&gt;
<h2>TinyMCE - non-jQuery</h2>
<p><strong><a href="http://tinymce.moxiecode.com/">Official Website</a></strong> | <strong><a href="http://tinymce.moxiecode.com/examples/full.php">Demo</a></strong><br />
<img src="http://www.queness.com/resources/images/richtexteditor/tinymce.gif" alt="TinyMCE" height="150" width="600" /></p>
<p>最经典的基于 JavaScript&nbsp;的编辑器，COMSHARP CMS 默认的编辑器就是这个。</p>
<h2>fckeditor - Non-jQuery</h2>
<p><strong><a href="http://www.fckeditor.net/">Official Website</a></strong> | <strong><a href="http://www.fckeditor.net/demo">Demo</a></strong><br />
<img src="http://www.queness.com/resources/images/richtexteditor/fckeditor.gif" alt="fckeditor" height="150" width="600" /></p>
<p>功能非常强大。</p>
<h2>Yahoo YUI Rich Text Editor - Non-jQuery</h2>
<p><strong><a href="http://developer.yahoo.com/yui/editor/">Official Website</a></strong> | <strong><a href="http://developer.yahoo.com/yui/editor/">Demo</a></strong><br />
<img src="http://www.queness.com/resources/images/richtexteditor/yui.gif" alt="Yahoo UI RTE" height="150" width="600" /></p>
<p>基于 Yahoo YUI，简单，但很可靠。</p>
<h2>Xinha - Non-jQuery</h2>
<p><strong><a href="http://xinha.webfactional.com/">Official Website</a></strong> | <strong><a href="http://xinha.webfactional.com/wiki/Examples">Demo</a></strong><br />
<img src="http://www.queness.com/resources/images/richtexteditor/xinha.gif" alt="Xinha" height="150" width="600" /></p>
<p>自由的基于&nbsp; BSD 许可编辑器，功能完善，很适合同各种系统集成。</p>
<p>
本文原文来源：<a href="http://www.queness.com/post/212/10-jquery-and-non-jquery-javascript-rich-text-editors">http://www.queness.com/post/212/10-jquery-and-non-jquery-javascript-rich-text-editors</a></p>
<img src ="http://www.blogjava.net/sealyu/aggbug/267680.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-04-27 10:23 <a href="http://www.blogjava.net/sealyu/archive/2009/04/27/267680.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript判断变量是否定义</title><link>http://www.blogjava.net/sealyu/archive/2009/03/17/260193.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Tue, 17 Mar 2009 02:49:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/03/17/260193.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/260193.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/03/17/260193.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/260193.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/260193.html</trackback:ping><description><![CDATA[在javascript中使用一个js变量时，<br />
例如：<br />
if(hasLoaded){<br />
&nbsp; //Do something here<br />
}<br />
如果此变量还未被定义，就会报错： 'xxxx' is #790000.<br />
<br />
这时，就需要对这个变量进行判断：<br />
if(typeof(hasLoaded) != 'undefined'){<br />
&nbsp; if(hasLoaded){<br />
&nbsp; &nbsp; //Do something here<br />
&nbsp; }<br />
}<br />
<br />
<br />
<img src ="http://www.blogjava.net/sealyu/aggbug/260193.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-03-17 10:49 <a href="http://www.blogjava.net/sealyu/archive/2009/03/17/260193.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用 Javascript 获取指定页面元素的位置</title><link>http://www.blogjava.net/sealyu/archive/2009/02/23/256188.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Mon, 23 Feb 2009 03:34:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/02/23/256188.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/256188.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/02/23/256188.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/256188.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/256188.html</trackback:ping><description><![CDATA[用&nbsp;Javascript&nbsp;获取指定页面元素的位置是一个非常常见的需求，本文介绍的方法能够准确返回一个元素相对于整个文档左上角的坐标，即元素的&nbsp;top&nbsp;、left&nbsp;的位置，而且能够兼容浏览器，相信对新手非常有用。<br />
<br />
<div>
<div>
<div><a href="http://blog.csdn.net/fengb4676/archive/2008/06/23/2578916.aspx#" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><a href="http://blog.csdn.net/fengb4676/archive/2008/06/23/2578916.aspx#" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy to clipboard</a><a href="http://blog.csdn.net/fengb4676/archive/2008/06/23/2578916.aspx#" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a><a href="http://blog.csdn.net/fengb4676/archive/2008/06/23/2578916.aspx#" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div>
</div>
<ol start="1">
    <li>&lt;script&nbsp;language="javascript"&nbsp;type="text/javascript"&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&lt;!--&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>//&nbsp;说明：用&nbsp;Javascript&nbsp;获取指定页面元素的位置&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>//&nbsp;整理：http://www.codebit.cn&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>//&nbsp;来源：YUI&nbsp;DOM&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>function&nbsp;getElementPos(elementId)&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;ua&nbsp;=&nbsp;navigator.userAgent.toLowerCase();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;isOpera&nbsp;=&nbsp;(ua.indexOf('opera')&nbsp;!=&nbsp;-1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;isIE&nbsp;=&nbsp;(ua.indexOf('msie')&nbsp;!=&nbsp;-1&nbsp;&amp;&amp;&nbsp;!isOpera);&nbsp;//&nbsp;not&nbsp;opera&nbsp;spoof&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;el&nbsp;=&nbsp;document.getElementById(elementId);&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;if(el.parentNode&nbsp;===&nbsp;null&nbsp;||&nbsp;el.style.display&nbsp;==&nbsp;'none'){&nbsp;return&nbsp;false;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;parent&nbsp;=&nbsp;null;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;pos&nbsp;=&nbsp;[];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//不定长数组？&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;box;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;if(el.getBoundingClientRect){&nbsp;&nbsp;//IE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;box&nbsp;=&nbsp;el.getBoundingClientRect();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;scrollTop&nbsp;=&nbsp;Math.max(document.documentElement.scrollTop,&nbsp;document.body.scrollTop);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;scrollLeft&nbsp;=&nbsp;Math.max(document.documentElement.scrollLeft,&nbsp;document.body.scrollLeft);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;{x:box.left&nbsp;+&nbsp;scrollLeft,&nbsp;y:box.top&nbsp;+&nbsp;scrollTop};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}else&nbsp;if(document.getBoxObjectFor){&nbsp;&nbsp;&nbsp;//&nbsp;gecko&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;box&nbsp;=&nbsp;document.getBoxObjectFor(el);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;borderLeft&nbsp;=&nbsp;(el.style.borderLeftWidth)?parseInt(el.style.borderLeftWidth):0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;borderTop&nbsp;=&nbsp;(el.style.borderTopWidth)?parseInt(el.style.borderTopWidth):0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos&nbsp;=&nbsp;[box.x&nbsp;-&nbsp;borderLeft,&nbsp;box.y&nbsp;-&nbsp;borderTop];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}else{&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;safari&nbsp;&amp;&nbsp;opera&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos&nbsp;=&nbsp;[el.offsetLeft,&nbsp;el.offsetTop];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent&nbsp;=&nbsp;el.offsetParent;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(parent&nbsp;!=&nbsp;el)&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(parent)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos[0]&nbsp;+=&nbsp;parent.offsetLeft;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos[1]&nbsp;+=&nbsp;parent.offsetTop;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent&nbsp;=&nbsp;parent.offsetParent;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(ua.indexOf('opera')&nbsp;!=&nbsp;-1&nbsp;&nbsp;||&nbsp;(&nbsp;ua.indexOf('safari')&nbsp;!=&nbsp;-1&nbsp;&amp;&amp;&nbsp;el.style.position&nbsp;==&nbsp;'absolute'&nbsp;)){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos[0]&nbsp;-=&nbsp;document.body.offsetLeft;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos[1]&nbsp;-=&nbsp;document.body.offsetTop;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(el.parentNode)&nbsp;{&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent&nbsp;=&nbsp;el.parentNode;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent&nbsp;=&nbsp;null;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(parent&nbsp;&amp;&amp;&nbsp;parent.tagName&nbsp;!=&nbsp;'BODY'&nbsp;&amp;&amp;&nbsp;parent.tagName&nbsp;!=&nbsp;'HTML')&nbsp;{&nbsp;//&nbsp;account&nbsp;for&nbsp;any&nbsp;scrolled&nbsp;ancestors&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos[0]&nbsp;-=&nbsp;parent.scrollLeft;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos[1]&nbsp;-=&nbsp;parent.scrollTop;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(parent.parentNode)&nbsp;{&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent&nbsp;=&nbsp;parent.parentNode;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent&nbsp;=&nbsp;null;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;{x:pos[0],&nbsp;y:pos[1]};&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>}&nbsp;&nbsp;//--&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&lt;/script&gt;&nbsp; <br />
    </li>
</ol>
</div>
<br />
<br />
第二种方法：<br />
function WebForm_GetElementPosition(element) {<br />
&nbsp;&nbsp;&nbsp; var result = new Object();<br />
&nbsp;&nbsp;&nbsp; result.x = 0;<br />
&nbsp;&nbsp;&nbsp; result.y = 0;<br />
&nbsp;&nbsp;&nbsp; result.width = 0;<br />
&nbsp;&nbsp;&nbsp; result.height = 0;<br />
&nbsp;&nbsp;&nbsp; if (element.offsetParent) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result.x = element.offsetLeft;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result.y = element.offsetTop;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var parent = element.offsetParent;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (parent) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result.x += parent.offsetLeft;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result.y += parent.offsetTop;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var parentTagName = parent.tagName.toLowerCase();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (parentTagName != "table" &amp;&amp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parentTagName != "body" &amp;&amp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parentTagName != "html" &amp;&amp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parentTagName != "div" &amp;&amp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parent.clientTop &amp;&amp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parent.clientLeft) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result.x += parent.clientLeft;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result.y += parent.clientTop;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parent = parent.offsetParent;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; else if (element.left &amp;&amp; element.top) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result.x = element.left;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result.y = element.top;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (element.x) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result.x = element.x;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (element.y) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result.y = element.y;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; if (element.offsetWidth &amp;&amp; element.offsetHeight) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result.width = element.offsetWidth;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result.height = element.offsetHeight;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; else if (element.style &amp;&amp; element.style.pixelWidth &amp;&amp; element.style.pixelHeight) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result.width = element.style.pixelWidth;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result.height = element.style.pixelHeight;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return result;<br />
} <br />
<img src ="http://www.blogjava.net/sealyu/aggbug/256188.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-02-23 11:34 <a href="http://www.blogjava.net/sealyu/archive/2009/02/23/256188.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IE屏蔽window.open()窗口的解决办法</title><link>http://www.blogjava.net/sealyu/archive/2008/11/08/239429.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Sat, 08 Nov 2008 09:16:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2008/11/08/239429.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/239429.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2008/11/08/239429.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/239429.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/239429.html</trackback:ping><description><![CDATA[作者： sealyu&nbsp;&nbsp; 日期：2008-11-8<br />
<br />
今天在开发的时候，碰到客户提到的一个问题，<br />
每次在下载文件的时候，IE都会阻止打开的保存文件的对话框。<br />
看了一下代码，发现项目使用了一个stream servlet来处理文件下载，在使用ajax返回页面后，使用window.open(link);打开保存对话框。<br />
问题应该就处在这里了，Google了一下，发现这是由于IE的安全机制。<br />
在微软的网站上有这么一段话：<br />
<h1 class="title">Pop-Up Blocking</h1>
<div class="intro">
<p>The Pop-up Blocking feature blocks pop-up (and pop-under) windows initiated automatically by a Web site. Internet Explorer blocks Pop-up windows in the <a href="http://go.microsoft.com/fwlink/?linkid=26003" target="_blank" logredir="CTT=ToExternal">Internet and Restricted sites zones</a>
<script language="Javascript">
if(typeof(IsPrinterFriendly) != "undefined")
{
var l = "http://go.microsoft.com/fwlink/?linkid=26003";
var nl;
var c = l.charAt(0);
var o = document.getElementById("EKE");
switch (c){
case "/":
nl=("&nbsp;[http://" + document.domain + l + "]");
break
case "#":
nl=("");
break
default:
nl="&nbsp;[" + l + "]"
}
if(o != null) o.innerHTML = nl;
}
</script>
by default. However, the Pop-up Blocker enables pop-up windows initiated by a user action. Users can configure Internet Explorer 6 for Windows&nbsp;XP with SP2 to be more or less restrictive. Users can also turn off the Pop-up Blocker altogether. Generally, the Pop-up Blocker enables a window to open under the following circumstances:</p>
<table border="0" cellpadding="0" cellspacing="0">
    <tbody>
        <tr>
            <td class="listBullet" valign="top">&#8226;</td>
            <td class="listItem">
            <p>When initiated by user action, such as clicking a button or hyperlink</p>
            </td>
        </tr>
        <tr>
            <td class="listBullet" valign="top">&#8226;</td>
            <td class="listItem">
            <p>When opened in the <a href="http://go.microsoft.com/fwlink/?linkid=26003" target="_blank" logredir="CTT=ToExternal">Trusted sites and Local intranet zones</a>
            <script language="Javascript">
            if(typeof(IsPrinterFriendly) != "undefined")
            {
            var l = "http://go.microsoft.com/fwlink/?linkid=26003";
            var nl;
            var c = l.charAt(0);
            var o = document.getElementById("EWE");
            switch (c){
            case "/":
            nl=("&nbsp;[http://" + document.domain + l + "]");
            break
            case "#":
            nl=("");
            break
            default:
            nl="&nbsp;[" + l + "]"
            }
            if(o != null) o.innerHTML = nl;
            }
            </script>
            (considered safe)</p>
            </td>
        </tr>
        <tr>
            <td class="listBullet" valign="top">&#8226;</td>
            <td class="listItem">
            <p>When opened by other applications running on the local computer</p>
            </td>
        </tr>
    </tbody>
</table>
<p>The affected script methods are:</p>
<pre class="codeSample">window.open<br />
window.showHelp<br />
window.showModalDialog<br />
window.showModelessDialog<br />
window.external<br />
window.NavigateAndFind</pre>
<table class="sidebarContent" border="0" cellpadding="0" cellspacing="0">
    <tbody>
        <tr style="padding: 0px 0px 7px;" onclick="">
            <td class="dropCapQ" style="vertical-align: top;" align="left" nowrap="nowrap"><br />
            </td>
            <td style="vertical-align: top;">
            <h5><img src="http://technet2.microsoft.com/library/gallery/templates/MNP2.Common/images/note.gif" alt="" border="0" height="10" width="10" />注：</h5>
            </td>
        </tr>
        <tr class="" id="eCE6E" style="padding: 0px 0px 7px;" valign="top">
            <td class="dropCapQ" align="right" nowrap="nowrap"><br />
            </td>
            <td>
            <p>Pop-ups created with <font face="Courier New"><strong>window.createPopup</strong></font> are unaffected by the Pop-up Blocker.</p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p style="text-indent: 2em;">在web编程过程中，经常会遇到一些页面需要弹出窗口，但是在服务器端用window.open弹出的窗口会被IE阻止掉，<a><font color="#43699a">showModalDialog</font></a>弹出的窗口有时并不能满足我们需要，我们需要弹出新的浏览器窗口。</p>
<p style="text-indent: 2em;">&nbsp;为什么我们编写的弹出窗口会被IE阻止呢，原来IE会自动判断弹出窗口的状态，它会阻止自动弹出的窗口，而通过我们用鼠标点击弹出的窗口，它是不会阻止的。这里就有一个问题，有人说：我的程序是写在服务器按钮里的，也是通过鼠标点击弹出的呀！其实只有在加载页面后，我们点击到弹出这段时间页面没有被重新加载的情况下，弹出的窗口才不会被阻止！这也就是说，写在服务器控件的回传事件里的window.open都会被阻止。<br />
<br />
继续Google解决办法，在分析了几种解决方法并进行对比之后，发现最简单有效的方法如下：<br />
在window.open()函数中增加一个参数，将target设置为&#8216;self&#8217;，<br />
即改为使用： window.open(link,'_self');<br />
问题解决。</p>
<br />
<img src ="http://www.blogjava.net/sealyu/aggbug/239429.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2008-11-08 17:16 <a href="http://www.blogjava.net/sealyu/archive/2008/11/08/239429.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对FckEditor编辑器在MAXTHON浏览器下选择服务器文件对话框显示不正常的改进 -...（转载）</title><link>http://www.blogjava.net/sealyu/archive/2008/04/10/192009.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Thu, 10 Apr 2008 14:53:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2008/04/10/192009.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/192009.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2008/04/10/192009.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/192009.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/192009.html</trackback:ping><description><![CDATA[用过FckEditor的朋友都知道，它的选择图片对话框中&#8220;浏览服
务器&#8221;按钮。点击该按钮可以浏览以前已经上传过的文件。不过这个按钮点击后弹出的对话框在MAXTHON浏览器下是以标签形式打开的，这样模态对话框就始
终显示在了浏览文件窗口之前，要想选择文件得先关掉模态对话框。先前有朋友提出把弹出模态对话框的功能改为ShowModlessDialog，这个终究
不是解决之道，现将我的解决方法写下来与大家分享：<br />
思路就是基于IE内核的浏览器采用模态对话框弹出浏览服务器窗口，其他的仍然window.open不变
1:修改"fckeditor"editor"dialog"common"fck_dialog_common.js<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><span style="color: rgb(0, 128, 128);">&nbsp;1</span>&nbsp;<span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">&nbsp;OpenFileBrowser(&nbsp;url,&nbsp;width,&nbsp;height&nbsp;)<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;2</span>&nbsp;<span style="color: rgb(0, 0, 0);">{<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;3</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;oEditor&nbsp;must&nbsp;be&nbsp;defined.</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;4</span>&nbsp;<span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;5</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;iLeft&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;(&nbsp;oEditor.FCKConfig.ScreenWidth&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">&nbsp;width&nbsp;)&nbsp;</span><span style="color: rgb(0, 0, 0);">/</span>&nbsp;<span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">&nbsp;;<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;6</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;iTop&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;(&nbsp;oEditor.FCKConfig.ScreenHeight&nbsp;</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">&nbsp;height&nbsp;)&nbsp;</span><span style="color: rgb(0, 0, 0);">/</span>&nbsp;<span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">&nbsp;;<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;7</span>&nbsp;<span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;8</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;sOptions&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span>&nbsp;<span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">toolbar=no,status=no,resizable=no,dependent=yes,scrollbars=yes</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;;<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;9</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;sOptions&nbsp;</span><span style="color: rgb(0, 0, 0);">+=</span>&nbsp;<span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,width=</span><span style="color: rgb(0, 0, 0);">"</span>&nbsp;<span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;width&nbsp;;<br />
</span><span style="color: rgb(0, 128, 128);">10</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;sOptions&nbsp;</span><span style="color: rgb(0, 0, 0);">+=</span>&nbsp;<span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,height=</span><span style="color: rgb(0, 0, 0);">"</span>&nbsp;<span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;height&nbsp;;<br />
</span><span style="color: rgb(0, 128, 128);">11</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;sOptions&nbsp;</span><span style="color: rgb(0, 0, 0);">+=</span>&nbsp;<span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,left=</span><span style="color: rgb(0, 0, 0);">"</span>&nbsp;<span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;iLeft&nbsp;;<br />
</span><span style="color: rgb(0, 128, 128);">12</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;sOptions&nbsp;</span><span style="color: rgb(0, 0, 0);">+=</span>&nbsp;<span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,top=</span><span style="color: rgb(0, 0, 0);">"</span>&nbsp;<span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;iTop&nbsp;;<br />
</span><span style="color: rgb(0, 128, 128);">13</span>&nbsp;<span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">14</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;The&nbsp;"PreserveSessionOnFileBrowser"&nbsp;because&nbsp;the&nbsp;above&nbsp;code&nbsp;could&nbsp;be</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">15</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;blocked&nbsp;by&nbsp;popup&nbsp;blockers.</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">16</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(&nbsp;oEditor.FCKConfig.PreserveSessionOnFileBrowser&nbsp;</span><span style="color: rgb(0, 0, 0);">&amp;&amp;</span><span style="color: rgb(0, 0, 0);">&nbsp;oEditor.FCKBrowserInfo.IsIE&nbsp;)<br />
</span><span style="color: rgb(0, 128, 128);">17</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">18</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;The&nbsp;following&nbsp;change&nbsp;has&nbsp;been&nbsp;made&nbsp;otherwise&nbsp;IE&nbsp;will&nbsp;open&nbsp;the&nbsp;file</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">19</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;browser&nbsp;on&nbsp;a&nbsp;different&nbsp;server&nbsp;session&nbsp;(on&nbsp;some&nbsp;cases):</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">20</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;http://support.microsoft.com/default.aspx?scid=kb;en-us;831678</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">21</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;by&nbsp;Simone&nbsp;Chiaretta.</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">22</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;oWindow&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;oEditor.window.open(&nbsp;url,&nbsp;'FCKBrowseWindow',&nbsp;sOptions&nbsp;)&nbsp;;<br />
</span><span style="color: rgb(0, 128, 128);">23</span>&nbsp;<span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">24</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(&nbsp;oWindow&nbsp;)<br />
</span><span style="color: rgb(0, 128, 128);">25</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">26</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;Detect&nbsp;Yahoo&nbsp;popup&nbsp;blocker.</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">27</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">28</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">29</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;sTest&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;oWindow.name&nbsp;;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;Yahoo&nbsp;returns&nbsp;"something",&nbsp;but&nbsp;we&nbsp;can't&nbsp;access&nbsp;it,&nbsp;so&nbsp;detect&nbsp;that&nbsp;and&nbsp;avoid&nbsp;strange&nbsp;errors&nbsp;for&nbsp;the&nbsp;user.</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">30</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oWindow.opener&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;window&nbsp;;<br />
</span><span style="color: rgb(0, 128, 128);">31</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">32</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);">(e)<br />
</span><span style="color: rgb(0, 128, 128);">33</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">34</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(&nbsp;oEditor.FCKLang.BrowseServerBlocked&nbsp;)&nbsp;;<br />
</span><span style="color: rgb(0, 128, 128);">35</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">36</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">37</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">38</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(&nbsp;oEditor.FCKLang.BrowseServerBlocked&nbsp;)&nbsp;;<br />
</span><span style="color: rgb(0, 128, 128);">39</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">40</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">41</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//这里是修改部分<br />
</span><span style="color: rgb(0, 128, 128);">42</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(oEditor.FCKBrowserInfo.IsIE)<br />
</span><span style="color: rgb(0, 128, 128);">43</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">44</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.showModalDialog(url</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&amp;rdm=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;Date(),window,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">status:false;dialogWidth:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">width</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">px;dialogHeight:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">height</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">px"</span><span style="color: rgb(0, 0, 0);">""</span><span style="color: rgb(0, 0, 0);">);<br />
</span><span style="color: rgb(0, 128, 128);">45</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">46</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
</span><span style="color: rgb(0, 128, 128);">47</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">48</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.open(&nbsp;url,&nbsp;'FCKBrowseWindow',&nbsp;sOptions&nbsp;)&nbsp;;<br />
</span><span style="color: rgb(0, 128, 128);">49</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">50</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">51</span>&nbsp;<span style="color: rgb(0, 0, 0);">}</span></div>
<br />
2:修改"fckeditor"editor"filemanager"browser"default"frmresourceslist.html<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">&nbsp;OpenFile(&nbsp;fileUrl&nbsp;)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(&nbsp;window.dialogArguments)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.dialogArguments.SetUrl(&nbsp;fileUrl&nbsp;)&nbsp;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.close()&nbsp;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.dialogArguments.focus()&nbsp;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.top.opener.SetUrl(&nbsp;fileUrl&nbsp;)&nbsp;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.top.close()&nbsp;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.top.opener.focus()&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<img src ="http://www.blogjava.net/sealyu/aggbug/192009.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2008-04-10 22:53 <a href="http://www.blogjava.net/sealyu/archive/2008/04/10/192009.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FireFox 下 window.close()有时不能关闭 问题的解决</title><link>http://www.blogjava.net/sealyu/archive/2008/04/10/192007.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Thu, 10 Apr 2008 14:51:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2008/04/10/192007.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/192007.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2008/04/10/192007.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/192007.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/192007.html</trackback:ping><description><![CDATA[<div>最近做项目的时候碰到一个问题：</div>
<div>在js里面使用window.close()，IE下工作正常，但是FireFox下有时可以，有时不行。</div>
<div>搜索发现，可以这样解决：</div>
<div>&lt;script &nbsp; language="javascript" &nbsp; type="text/javascript"&gt; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; function &nbsp; closeWindow() &nbsp; { &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; window.open('','_parent',''); &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; window.close(); &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; } &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &lt;/script&gt; &nbsp; &nbsp; <br />
&nbsp; &lt;a &nbsp; href="javascript:closeWindow();"&gt;Close &nbsp; Window&lt;/a&gt;</div>
<div>&nbsp;</div>
<div>在前面加一句&nbsp; window.open('','_parent','');&nbsp;&nbsp; </div>
<div>作用为：</div>
<div>fool &nbsp; the &nbsp; browser &nbsp; into &nbsp; thinking &nbsp; that &nbsp; it &nbsp; was &nbsp; opened &nbsp; with &nbsp; a &nbsp; script &nbsp; <br />
&nbsp;
This &nbsp; opens &nbsp; a &nbsp; new &nbsp; page, &nbsp; (non-existent), &nbsp; into &nbsp; a &nbsp; target &nbsp;
frame/window, &nbsp; (_parent &nbsp; which &nbsp; of &nbsp; course &nbsp; is &nbsp; the &nbsp; window &nbsp; in
&nbsp; which &nbsp; the &nbsp; script &nbsp; is &nbsp; executed, &nbsp; so &nbsp; replacing &nbsp; itself), &nbsp;
and &nbsp; defines &nbsp; parameters &nbsp; such &nbsp; as &nbsp; window &nbsp; size &nbsp; etc, &nbsp; (in &nbsp;
this &nbsp; case &nbsp; none &nbsp; are &nbsp; defined &nbsp; as &nbsp; none &nbsp; are &nbsp; needed). &nbsp; Now &nbsp;
that &nbsp; the &nbsp; browser &nbsp; thinks &nbsp; a &nbsp; script &nbsp; opened &nbsp; a &nbsp; page &nbsp; we &nbsp;
can &nbsp; quickly &nbsp; close &nbsp; it &nbsp; in &nbsp; the &nbsp; standard &nbsp; way&#8230;</div>
<img src ="http://www.blogjava.net/sealyu/aggbug/192007.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2008-04-10 22:51 <a href="http://www.blogjava.net/sealyu/archive/2008/04/10/192007.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>