文件保存后自动刷新浏览器页面

做前端的就是苦命,前端的键盘最苦命的是F5按键。
每次修改了点页面,写了点代码就要按F5去测试,着实让人崩溃。
除非用DreamWeaver这种工具,或者TopStyle这种,否则就免不了受罪。
这也归罪于微软各个GUI直接通信不良……

今天找到个方案, 这位达人写了一个Firefox小扩展,用于修改js和host文件的时候用。
原理请参考上面的链接,我就拿来改了一改

敲击这里下载

注意:这个工具只是一个很原始的模型!!

怎么用呢?

很简单,在Firefox,打开你所要的页面,这个扩展会不停检测 D:\refresh.firefox 文件,
如果存在这个文件,他就会自动刷新当前页面并删除这个文件。

那么如何创建这个文件呢?

For VIM

如果你是用VIM的,在$MYVIMRC中加入这句话

function! b:AutoRefresh()
!start cmd /c echo x > d:\\refresh.firefox
syntax on
endfunction
autocmd BufWritePost,FileWritePost *.html :call b:AutoRefresh()

其中 syntax on 这句是为了可以不会出现一个等待键盘确认的事件。我是参考这里
这就让html文件保存的时候生成d:\refresh.firefox文件了

For Editplus

如果你像我一样是Editplus用户的话,也很容易。如图

设置Auto Run: After Save里的,添加命令就行了。
cmd /c echo x >d:\refresh.firefox
只不过还是有点后遗症,随便什么文件保存它都会生成……
作为一个不开源,没有插件体系,更新也很不勤快的编辑器……要求也不要太高了……
友情提醒:请使用正版软件~可以在有能力的时候购买许可,或者转用其他开源编辑器,比如Notepad++等。不要让使用盗版成为国内软件开发人员的原罪……

For Others

基本原理都知道了,应该不难办了吧?

系统资源占用

实测下来,我E7200,CPU占用率不到1%。这个setInterval还是很节约资源的。

带来的好处

仔细想的话,节约的不只一步。你要切换窗口,要按f5,看效果,再切换回来继续调整。但如果你是宽屏或者是编辑器背景透明的话,无需切换就可以完成了。节约的是大把时间。如果是虚拟机或者其他电脑测试的情况下,也可以用局域网共享实现,非常好用。其他浏览器只要提供访问文件的接口,也可以如法炮制。

禁用脚本时显示元素——再从前端角度浅谈产品设计中的可用性和可访问性

三个月前,老鱼在其博客和支付宝UED博客中发表了浅谈产品设计中的可用性和可访问性
文中阐述了这样一种状况,页面上有元素需要暂时隐藏以避免过多的信息对用户产生干扰。而隐藏的信息需要通过脚本的交互显示出来,以增强可用性。那么对于不启用脚本的用户,如何保证可访问性的问题。
文中提到两种方案:

实现方案1:采用css样式设置企业注册信息的容器默认为隐藏,当用户点选企业后通过js脚本改变容器的隐藏属性为显示。
实现方案2:通过脚本控制企业注册信息的容器的初始状态为隐藏,当用户点选企业后通过脚本改变容器的隐藏属性为显示。

方案一的缺点在于无视可访问性
方案二的缺点在于“要在页面结构加载完成后,再去初始化要隐藏的容器,当客户端网速不佳的情况下,会先显示企业注册信息的内容,几秒后又不见了,体验上有所折扣。”

我又在文章的一楼评论中提出了两个方案:解决了第二个方案的缺点

实现方案3:把脚本直接紧跟着需要隐藏的元素后面
实现方案4:在页面头部最开始的地方写入脚本,这个脚本用于生成隐藏元素的css代码。

方案三的缺点在于结构行为和样式的高度耦合,非常不利于维护,且易被同行耻笑。
方案四比上面略好,但同样由于行为和样式的混杂,不利于维护。

还有这位兄弟提出的

实现方案5:用脚本给body加上个class,所有需要隐藏的元素的CSS都用这个class开头,比如 .js #id{display:none;}

今日又发现新思路,利用noscript标签。这个圡圡的标签。这本来应该是最先想到的,却似乎思维被僵化了,一味从JS和CSS角度去看了,忽略了HTML本身。

实现方案6:首先使用方案一,直接用CSS隐藏元素,然后再方案一的基础上,增加noscript标签,其中的再写入CSS用来覆盖先前的CSS。(演示代码代码在本文结尾)

是的,就这么简单、这么的圡,但很有效。对于 IE 6 和 Firefox 3测试通过。Chrome上我找不到关闭脚本的选项,故未经测试。

当一切看起来这么美好的时候,放到W3C的验证里边就有麻烦了,XHTML下他说noscript不能没有object?我很晕,然后放上object后他又说style不能放在这里,只能放在head里。我换用了link也一样报错。换了html 4也没有好转。
我在XHTML的描述中没有找到相关内容 http://www.w3.org/TR/xhtml1/
而在HTML 4.01中发现,http://www.w3.org/TR/html401/interact/scripts.html#h-18.3.1
然后我纳闷了一下,里边并没有提到noscript里不能放style和link。进一步考据,找到http://www.w3.org/TR/html401/struct/links.html#h-12.1.3
这里提到

The LINK element may only appear in the head of a document.

又找到 http://www.w3.org/TR/html401/present/styles.html#h-14.2.3

The STYLE element allows authors to put style sheet rules in the head of the document.

但无论如何,我head里放个noscript,里边再带个style或者link就不让我通过验证了!什么世道!

当然,这么2的事情,W3标准的制定小组早就想到啦! 在HTML 5中,这个问题将会被解决。可以参考这里: http://www.w3.org/TR/html5/semantics.html#the-noscript-element。同时代码页成功通过了验证。

标准这种东西我向来就把他当作迷信一样,不可不信也不可全信。对于这个问题,我宁可不遵守。因为无论从技术实现,还是语义化HTML,抑或者可用性角度来看,这都是个完美的解决方案,我不想被标准这个玩意所束缚。一方面现在主流的浏览器都支持,没有兼容性问题,另一方面将来的标准也支持这种做法,何乐而不为呢?

两种情况下不适合用方案六:
1,你是极端完美主义者。
2,你的老板或者客户只认W3C验证。

测试地址:
http://shawphy.com/demo/noscript-for-css.html
直接到W3C接受检验:
http://validator.w3.org/check?uri=http://shawphy.com/demo/noscript-for-css.html
附代码,我为了方便其间,用了HTML 5的doctype:





用noscript在禁用脚本时显示元素



你看不到

到W3C验证