﻿<?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-govo-文章分类-Prototype.js</title><link>http://www.blogjava.net/govo/category/14973.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 03:47:59 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 03:47:59 GMT</pubDate><ttl>60</ttl><item><title>当prototype-window class 遇上Really Simple History(RSH)</title><link>http://www.blogjava.net/govo/articles/68405.html</link><dc:creator>govo</dc:creator><author>govo</author><pubDate>Thu, 07 Sep 2006 17:42:00 GMT</pubDate><guid>http://www.blogjava.net/govo/articles/68405.html</guid><wfw:comment>http://www.blogjava.net/govo/comments/68405.html</wfw:comment><comments>http://www.blogjava.net/govo/articles/68405.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/govo/comments/commentRss/68405.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/govo/services/trackbacks/68405.html</trackback:ping><description><![CDATA[前天用了<a href="http://prototype-window.xilinus.com/">prototype window class </a>组件window.js做网页内浮动窗口，用<a href="http://www.codinginparadise.org/projects/dhtml_history/README.html">RSH</a>的dhtmlHistory.js做浏览器历史激活，但在IE上两者有冲突。经过我对 dhtmlHistory.js一天的研究，疯狂的alert，终于查出，原来是window.historyStorage.init()生成的form有问题。<br />　　我用的浏览器有Firefox1.5，Opera9和IE7b2，现在的问题主要针对IE7b2,个人认为IE6和7没本质的区别，所以应该也能在IE6上运行。<br /><br />我们来看看dhtmlHistory.js，在566行左右，有如下定义：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> styleValue </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">position: absolute; top: -1000px; left: -1000px;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;     <br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> newContent </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />         </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;form id='historyStorageForm' </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> <br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />               </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">method='GET' </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />               </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">style='</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> styleValue </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">'&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;textarea id='historyStorageField' </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                      </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">style='</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> styleValue </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                      </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">name='historyStorageField'&gt;&lt;/textarea&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />         </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;/form&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> document.write(newContent);</span></div><br />用于生成如下语句：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">form </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">='historyStorageForm' </span><span style="COLOR: #ff0000">method</span><span style="COLOR: #0000ff">='GET' </span><span style="COLOR: #ff0000">style</span><span style="COLOR: #0000ff">='position: </span><span style="COLOR: #ff0000">absolute; top: -1000px; left: -1000px;'</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">textarea </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">='historyStorageField' </span><span style="COLOR: #ff0000">style</span><span style="COLOR: #0000ff">='position: </span><span style="COLOR: #ff0000">absolute; top: -1000px; left: -1000px;' name</span><span style="COLOR: #0000ff">='historyStorageField'</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">textarea</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">form</span><span style="COLOR: #0000ff">&gt;</span></div><br />生成这个form主要是为了让页面在加载时保存历史记录状态，下面是引自dhtmlHistory.js的一段注释，偶的E文不好，各位自己看啊：<br /><font color="#808080">/** An object that uses a hidden form to store history state <br />    across page loads. The chief mechanism for doing so is using<br />    the fact that browser's save the text in form data for the<br />    life of the browser and cache, which means the text is still<br />    there when the user navigates back to the page. See<br />    http://codinginparadise.org/weblog/2005/08/ajax-tutorial-saving-session-across.html<br />    for full details. */</font><br /><br />　　如果你没有用到prototype window class 组件的window.js（v0.85）做窗口浮动，你会很好的运行它，事实上，用了window.js，RSH也能很好的工作 ，只是window.js不工作了。:)<br />其实生成的form看上去也是没什么问题的，只是不知道为何它有魔力可以让window.js不工作，但直接写到HTML而不是通过 document.write生成的话是没问题的。可能是document.write的工作方式问题吧:)  document.write方法一般放在&lt;head&gt;标签前，那么在运行的时候它就可以在&lt;body&gt;标签面的第一句写上东西了，如果放在&lt;body&gt;内或者让页面onload完再用，那么很不幸，&lt;body&gt;里面的东西全被替换了（嘿嘿，可以用 firefox的firebug扩展看到运行后的内容）。说回dhtmlHistory.js，在结尾部分，有这样一句：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span><img id="Codehighlighter1_0_40_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_40_Open_Text.style.display='none'; Codehighlighter1_0_40_Closed_Image.style.display='inline'; Codehighlighter1_0_40_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_0_40_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_40_Closed_Text.style.display='none'; Codehighlighter1_0_40_Open_Image.style.display='inline'; Codehighlighter1_0_40_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span id="Codehighlighter1_0_40_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id="Codehighlighter1_0_40_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">* Initialize all of our objects now. </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />window.historyStorage.init();</span></div><br />以把这个form写到页面中。<br />　　很奇怪，通过document.write生成的form也不全有问题，只是form标签内对style的设置有问题，只要把 + "style='" + styleValue + "'&gt;"去掉就可以了！因为水平有限，所以我左思右想也不懂为何，没能说出原由。<br />　　现在，我重新写了一段代码：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> newContent </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />         </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;div style='</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> styleValue </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">'&gt;&lt;form id='historyStorageForm'&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;textarea id='historyStorageField' name='historyStorageField'&gt;&lt;/textarea&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />         </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;/form&gt;&lt;/div&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span></div><br />我想这样组织HTML会更好，让form更干净。其实dhtmlHistory.js源码的很多地方都应能被修改得更好。如果应用到实际中，认真看看源码并改改它会好点。<br />　　<br />　　另外提醒想对类似RSH这样通过iframe激活IE历史记录的朋友，如果你想测试，一定要通过运行服务的方式来浏览页面，否则会出错也得不到你最终的效果。因为直接通过IE来打开你的HTML文件，IE会对iframe的访问有限制，请大家小心。<br /><br />　　本从水平有限，有错误之处，还请请各位指正，谢谢。<br /><br /><br />附：<br />RSH的主页：http://www.codinginparadise.org/projects/dhtml_history/README.html<br />prototype-window的主页： http://prototype-window.xilinus.com/<br />本文例子源码：<br /><a href="http://www.matrix.org.cn/resource/upload/forum/2006_07_08_160955_affiOjmUve.zip">[点击下载]</a><br /><br />后记：此文早在别处的BLOG和论坛发过，可惜没有人参与讨论，不知是自己文笔问题还是太基础。但既然是自己写的，当然可以收回来啦。<img src ="http://www.blogjava.net/govo/aggbug/68405.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/govo/" target="_blank">govo</a> 2006-09-08 01:42 <a href="http://www.blogjava.net/govo/articles/68405.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>