Fising's Blog

all about web application development

JavaScript

QQZone 分享 UTF-8 编码的 HTML5 页面乱码解决方案

今天一个朋友让帮忙看看页面分享的乱码问题。使用的是JiaThis的分享插件。一切都完美无缺,除了 QQZone 分享的乱码问题。 http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=xxx 其中,xxx 就是要分享的网址了。但是对于 Doctype 声明为 HTML5 并且 UTF-8 编码的页面,提取页面title和description出现乱码。为啥单单 UTF-8 的乱码?GB2312的却没事儿呢? 可能的原因是,腾讯的这个空间分享工具,是根据页面的 HTML 编码声明语句来正则匹配得到当前页面的编码的。如果匹配到,则使用页面设定的编码,否则将使用GB2312的编码。 XHTML 1.0 中标准的编码声明:

HTML5 中的编码声明:

由于该页面使用的是 HTML5 的 doctype,导致获取页面编码失败,默认使用GB2312编码,才出现了乱码问题。那么如何解决呢?显然是更换 Doctype 为 XHTML 1.0的咯。 真不明白,为啥一个页面明明没有用到 HTML5的任何特性,却要声明为 HTML5 的 Doctype.  莫非这就是传说中的NC … 更改好编码之后,仍然是乱码,由此猜想可能是腾讯的服务器端做了数据缓存。咋办呢?换个页面地址?一般来说这样是可行的。不过今天的情况有点不一样。产品已经推出,宣传上都是用的现有地址,如果更改了页面地址,肯定要流失不少点击量。 借鉴一下我们针对图片和JS,CSS等页面资源文件缓存的处理办法,给页面地址加个QUERY STRING。例如,地址原来是:

更改为

不过这个地址貌似不太好看呐。所以就想取个折中方案。在浏览的时候,使用原始地址,而在分享的时候,使用下面的带有Query String 的地址以防止使用缓存数据。 由于 JiaThis 插件是第三方站的 JS 生成的,所以我们需要确保在插件完成初始化之后,对其进行事件的重新绑定。这里可以使用setInterval 或者 setTimeout [...]

, , , , , ,

延迟 Image 加载Lazy Image Jquery 插件

在雨林木风系统门户页面源码看到的,记录一下,备用。

, , ,

在线运行PHP、C#和JavaScript代码的网站

CodeRun http://www.coderun.com/ide/ 提供在线执行PHP、C# 和 JavaScript 代码的功能,想要调试代码但是手边又没有现成可用的环境时,可以应急使用。

, ,

Javascript checkbox 级联选择插件

使用方法:

, , ,

动态创建 script & 动态修改 script scr 属性

JavaScript 刷新页面的几种方法总结

1. history.go(0) 2. location.reload() 3. location = location 4. location.assign(location) 5. document.execCommand(‘Refresh’) 6. window.navigate(location) 7. location.replace(location) 8. document.URL = location.href

IE浏览器下iframe空白的原因再讨论

本博客之前讨论了IE浏览器下iframe空白的解决方案,最优的解决方案是在事件处理函数最后添加 return false 语句。 后来通过使用 HttpWatch 工具查看请求过程,发现其实是因为 iframe 的请求地址被 abort 掉了,转而去请求 a  标签中的 href 地址,而恰此时 href 中的地址是个无效的地址“javascript://” ,因此页面才出现了空白。这是一个 IE6 的 bug。 为了更好的理解这个原因, 请运行下面的代码:

关于 jQuery 1.4.4 中 function( window, undefined ) 写法的原因讨论

今天在读 jQuery 1.4.4 版本代码的时候,发现下面的写法:

window 肯定是没问题, 表示 BOM 浏览器对象模型中的 window 对象。但是这里为什么会有一个名为 undefined 的形参呢?起初的时候很不理解。去技术群请教了一下,才真正理解了这里的原因。 原来,Javascript 中的 undefined 并不是作为关键字(全部Javascript关键字列表)出现的。因此可以允许用户对其赋值。例如:

如此一来,假如 jQuery 中使用下面的写法:

必然造成中间代码里的 undefined 遭到污染。因为在默认情况下,对于一个未定义的变量,它的值应该是 undefined,假如用户使用形如

的代码进行赋值,那么,jQuery 中的 undefined 的值就变成了用户指定的值(这里是字符串 ‘myValue’)。这样会造成 jQuery 内部异常。 而 jQuery 采用的这种写法,就很好的避免了这个问题。在执行匿名函数的时候,只传递一个参数 window, 而不传递 undefined,那么函数体中的 undefined 局部变量的值,刚好就是 undefined. 甚为巧妙啊。

浏览器对象模型BOM结构图

Previous Posts Next posts