Archive for the 'JS/Ajax' Category

scroll事件的效率问题

scroll事件中加了一条语句,发现IE中滚动时,CPU飙升,非常占资源。

测试了下发现,滚轮如果滚一小格,IE7会触发三次事件,IE6会触发四次事件,FF/Chrome等只触发一次,而正常滚动时,每次都会滚动好几个小格,也就导致了IE比较耗资源。

利用延迟,简单的优化了一下自己的代码:

虽然还是会执行N次clearTimeout,但和原来执行语句相比,几乎可以忽略clearTimeout,CPU不再飙升。

解决safari,chrome的iframe页面缓存问题

在写一个弹出对话框时,发现对话框中的iframe在safari,chrome中有严重的缓存问题。
只要着给iframe加一个随机的name,就可以解决这个问题~

阻止事件冒泡及浏览器默认行为

阻止向上一级冒泡:

阻止向下一级冒泡:
<p onclick=”test(this,event)”></p>

阻止浏览器默认行为:

非IE中的currentStyle

currentStyle用来读取写在css中的样式,style只能读取写在style=”"中的样式。
但是,只有IE支持currentStyle,其他浏览器并不支持,不过有替代的方法:

一个不错的函数:

JS跨域问题

今天被这个问题郁闷了一阵,js控制不了外域iframe里的东西,还以为是脚本写错了,也没发现什么错误,后来才发现是跨域权限的问题。
由于安全原因,跨域访问是被各大浏览器所默认禁止的。

有什么解决方法呢?

找到一个比较傻的办法:
被包含的页
onload=”window.clipboardData.setData(’text’,String(’frameHeight=’+window.document.body.scrollHeight));”

主页面

但这种方法有他的局限性:只对windows 下的IE有用。

其实这个问题可以分为好几种情况:
一、本域和子域的相互访问: www.xhlv.com和blog.xhlv.com
  在www.xhlv.com和iframe里面都加上document.domain = “xhlv.com”,这样就可以统一域了,可以实现跨域访问。
二、本域和其他域的相互访问: www.a.com和www.b.com 用 iframe
  通过hash来实现,如果说是主页给iframe传变量,可以改变iframe的src;如果说是iframe里的页面给主页传变量,可以改变parent.location.href(parent.location.href是唯一能修改的,连读都读不到,没权限;想parent.location.href=parent.location.href+”#xx”是行不通的;parent.location.hash就更别想了)
  再通过给一个时钟来获取变量就OK了。
三、本域和其他域的相互访问: www.a.com和www.b.com 用 XMLHttpRequest访问代理
  通过中间后台程序来传递变量。
四、本域和其他域的相互访问: www.a.com和www.b.com 用 JS创建动态脚本
  使用<script>标签来请求,script的src属性是可以跨域的。