网站favicon.ico显示不了的原因

现在人们都喜欢在自己的网站上放上自己的favicon.ico,不仅可以标识网站的身份,自己看着也赏心悦目。但有很多原因会导致favicon.ico显示不出来,我总结了下,有以下几个原因:

图标的链接地址或者HTML代码出错了

这是个低级错误,但也不是不可能发生的,首先要看看图标的链接地址和HTML代码对不对。一般如果直接把favicon.ico图标放在网站的根目录下,页面是可以自动寻址到这个图标文件的。正确的代码如下:

<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />

火狐还支持GIF动画格式的图标,代码如下:

<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="favicon.gif" type="image/gif" />

没有清空缓存

要清空浏览器的缓存,在IE中不仅要清空Internet临时文件,也要把历史记录清空。对于360搜狗傲游这些浏览器清空缓存会稍微麻烦点,它们会将favicon.ico存储在自己特定的文件夹里,以加快页面的访问速度。

360浏览器

要进入自己的Application Data中寻找360浏览器的数据,比如我的用户名为Jon。如果用的是XP,那么就找到C:\Documents and Settings\Jon\Application Data\360se\data\ico文件夹;如果是Win7,那么就找到C:\Users\Jon\AppData\Roaming\360se\data\ico文件夹。这里是360浏览器缓存网站favicon.ico的地方,把ico文件夹清空。

搜狗浏览器

同样也要找Application Data,比如我的用户名为Jon。如果用的是XP,那么就找到C:\Documents and Settings\Jon\Application Data\SogouExplorer\FavIcon文件夹;如果是Win7,那么就找到C:\Users\Jon\AppData\Roaming\SogouExplorer\FavIcon文件夹。这里是搜狗浏览器缓存网站favicon.ico的地方,把FavIcon文件夹清空。

傲游浏览器

我使用的是傲游浏览器2,把它安装到了D:\Maxthon2目录下,那么在这个目录下找到名为Favicons的文件夹,这里是傲游浏览器缓存网站favicon.ico的地方,把Favicons文件夹清空。

favicon.ico格式不对

最好使用专业的Icon制作软件,可以在《免费的图标制作工具》一文中找一些使用。要想知道自己的图标文件格式是否正确,可以先下载其它网站的Icon来对比下。比如可以下载Googlefavicon.ico文件,地址为:http://www.google.com/favicon.ico。把自己的favicon.icoGooglefavicon.ico放在一起,开启文件浏览的缩略图模式。看下面的图片,可以正确显示的就是正确格式,不能显示的就是错误格式。在下图中favicon-1.icofavicon-2.ico都能正确显示,是正确的格式,而favicon-3.ico的格式错误,显示不正确。

favicon.ico

一般网站用的favicon.ico的尺寸为16×16就可以了,

如果通过以上的方法favicon.ico仍然显示不了,那、那、那,那我也就没有办法了。

发表在 前端 | 标签为 , | 2 条评论

用document.referrer找到当前流量的来源页面

在前端开发中可以使用document.referrer来获得前流量的来源参考页,也就是说可以用这个来获得是从哪个页面跳到本页面的。另外如果是在同一个域名下也可以使用windoww.opener对象去获取源页面的地址,如下面代码:

var referrer = window.opener.location.href;

Document.Referrer由于各种原因可能会丢失,相关的原因和解决办法可以参考《Document.Referrer丢失的几个原因》一文。

发表在 前端 | 标签为 , | 留下评论

20个免费的Flash游戏教程

原文:《20 Free Tutorials to Create Your Own Flash Game》

Flash是一款充满趣味性与教育性于一体的创作软件,但要想学习和精通却十分地艰难。很多网站也提供了免费或收费的教程,在这里Dezinerfolio为Flash游戏开发者提供了一些免费的教程。每个学习Flash的人都希望能够创作自己的游戏作品,希望这些教程能够给予他们很多帮助。又:这里列出的教程都附带有源文件,按照教程里面的内容一步一步去做吧。

20 Free Tutorials to Create Your Own Flash Game

发表在 Flash | 标签为 , , , , | 留下评论

免费的图标制作工具

图标在网页和软件制作中经常用到,现在推荐一些免费好用的图标软件在这里。嘿嘿,我很喜欢免费开源的东西。

IcoFX

IcoFX

IcoFX是一款免费的图标编辑工具,让您轻松创建Windows XP和Windows Vista图标。在编辑区您可以轻松的预览、保存、更改您的图标。您可以将您喜欢的图像转换为图标或图标转换为图像。内置40多个效果,强大的亮度、对比度、饱和度、色调调整工具让您轻松修饰图标。主要特点如下:

  • 支持PNG压缩的Vista图标
  • 可以制作Windows 98/ME/2000/XP/Vista图标
  • 支持Macintosh OS X图标
  • 能够将Macintosh图标转换成Windows图标
  • 支持图标库功能
  • 制作网站图标
  • 将各种图像文件转换成图标文件
  • 增加、删除、修改exe文件中包含的图标
  • 支持Alpha透明
  • 批处理导入、导出、提取图标
  • 多种语言支持
  • 40多种效果和自定义滤镜
  • 支持256×256分辩率
  • 数据类型:2,16,256,真彩色,真彩色+Alpha
  • 从32位exedll文件中提取图标
  • 导入和导出图像
  • 透明、亮度、对比度、饱和度、色调调整工具
  • 更多

继续阅读

发表在 软件 | 标签为 | 留下评论

pc.de的10套精美Icon

pc.de发出了10套共1000个Icon,这些Icon是基于Creative Commons Attribution 3.0 License协议,对于个人和商业可以免费使用。这10套Icon数量多,但是不失精美,十分适合用于网站。可以到这里下载。

pc.de frankfurt

继续阅读

发表在 设计 | 标签为 | 留下评论

gentleface的免费Icon

下面是gentleface设计的Icon,可以免费用于非商业使用,喜欢的可以在这里下载。这一款Icon设计地非常简洁,但却十分精致,有黑白两套,这里只列出了白色系列的。

gentleface free icon

发表在 设计 | 标签为 | 留下评论

相当有爱的icon和字体

没有想到这些可爱的Icon是用字体做的,非常喜欢这些简洁可爱风格型的,不过做这些Icon的字体都是要收费的。Icon可以到这里下载大图,相应的字体可以点击这里寻找。

monochrome ico
monochrome ico
monochrome ico

发表在 设计 | 标签为 | 留下评论

表格排序代码

这里的代码是根据《JavaScript高级程序设计》第12章里面的示例重新整合的,关于Arraysort的用法可以看下《JavaScript高级程序设计》第12章,也可以看下《JavaScript sort()方法》

下面是详细代码和注释:

/**
 * 表格排序
 */
var sortTable = {
	/**
	 * 转换函数
	 * 可以将 String 类型的变量转成 Int,Float,Date 的格式
	 * @param {String} v 原来的值
	 * @param {String} tp 值类型 int,float,date,默认为 string
	 */
	convert:function(v,tp){

		switch(tp){
			case 'int':
				return parseInt(v);
			case 'float':
				return parseFloat(v);
			case "date":
				// IE6 只认 yyyy/mm/dd hh:mm:ss的格式
				return new Date(Date.parse(v.replace(/\-/g,'/')));
			default:
				return v.toString().toLowerCase();
		}
	},

	/**
	 * 对比两个行
	 * @requires sortTable.convert
	 * @param {Int} ic 排序要参照的表格序号
	 * @param {String} dt 值类型 int,float,date,默认为 string
	 */
	compareTrs:function(ic,dt){

		/**
		 * 返回一个新的对比函数
		 * @requires sortTable.convert
		 * @param {Object} r1 第一行
		 * @param {Object} r2 第二行
		 */
		return function(r1,r2){
			var v1 , v2;
			// 如果节点拥有 data-sort 属性
			// 则根据 data-sort 属性进行排序
			if(r1.cells[ic].getAttribute('data-sort')){
				v1 = sortTable.convert(r1.cells[ic].getAttribute('data-sort'),dt);
				v2 = sortTable.convert(r2.cells[ic].getAttribute('data-sort'),dt);
			}else{
				// 如果节点没有 data-sort 属性
				// 则根据节点的 nodeValue 值进行排序
				v1 = sortTable.convert(r1.cells[ic].firstChild.nodeValue,dt);
				v2 = sortTable.convert(r2.cells[ic].firstChild.nodeValue,dt);
			}
			// 默认降序排列
			if(v1 > v2){
				return -1;
			}else if(v1 < v2){
				return 1;
			}else{
				return 0;
			}

		};
	},

	/**
	 * 表格排序函数
	 * 这个表格要有 thead 和 tbody
	 * @requires sortTable.compareTrs
	 * @param {String} tid 要排序的表格 ID
	 * @param {Int} ic 排序要参照的表格序号
	 * @param {String} tp 值类型 int,float,date,默认为 string
	 */
	sortTr:function(tid,ic,dt){
		var tb = document.getElementById(tid), // 获得表格 table
		bd = tb.tBodies[0], // 获得表格的tbody
		trs = bd.rows, // 获得表格 tbody 下的行集合
		arr = [], // 用于存储 tr 行集合的列表
		i=l=trs.length, // 获得 tr 行集合的个数
		fg = document.createDocumentFragment(), // 临时片断
		st=tb.getAttribute('data-sort');

		// 将 tr 行存储到 arr 中
		while(i--){
			arr[i] = trs[i];
		}
		// st 可能为 0 或者 NaN
		if(st!=null && (parseInt(st)==ic)){
			// 如果表格当前的排序号和 ic 相等
			// 表明已经按照这个属性排序过了
			// 反排序就可以了
			arr.reverse();
		}else{
			arr.sort(sortTable.compareTrs(ic,dt));
			tb.setAttribute('data-sort',ic);
		}

		for(i=0;i<l;i++){
			fg.appendChild(arr[i]);
		}

		bd.appendChild(fg);

		tb.setAttribute('data-sort',ic);

		tb = bd = trs = arr = i = l = fg = null;

	}
};

继续阅读

发表在 前端 | 标签为 , , , | 留下评论

在非IE中实现mouseenter和mouseleave和的功能

IE下的mouseentermouseleave方法的好处我就不多说了,关于compareDocumentPosition方法的详细解释请参考《跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition》,在这里我只给出在非IE中实现这两种功能的简易方法。

下面是模拟IE下的mouseentermouseleave功能代码,里面也加上了详细的注释。

/**
 * 只在非IE中使用
 * 模拟 IE 中 mouseenter 和 mouseleave 的效果
 * @param {Event} e 发生的事件
 * @param {Function} fun 触发的行为
 */
var hover = function(e,fun){
	/**
	 * 因为这个函数只在非IE的浏览器中使用
	 * 所以可以使用 e.relatedTarget
	 * 来获得与事件的目标节点相关的节点
	 */
	var t = e.relatedTarget,

	// 获得触发此事件的节点
	t2 = e.target;

	/**
	 * 如果当前的节点与触发此事件的节点为同一节点
	 * 并且事件的目标节点不是当前节点的子节点
	 * 则触发行为
	 */
	if(this == t2 && t && !(this.compareDocumentPosition(t) == 20)){
		fun.call(this);
	}
	t = t2 = null;
}

上面的代码看似很多,但去除注释后代码就非常少了。继续说这个函数的用法,设有如下的DOM结构:

继续阅读

发表在 前端 | 标签为 , | 留下评论

那些听了很久只知道半截的话

转自《[图说]【喷嚏图卦20101111】某些人已经习惯了一个人》

爱迪生:天才是1%的灵感加上99%的汗水,但那1%的灵感是最重要的,甚至比那99%的汗水都要重要

拿破仑:中国是睡狮,一旦醒来,整个世界都会为之颤抖。它在沉睡着,谢谢上帝,让它睡下去吧!

黑格尔:存在即合理,凡是合乎理性的东西都是现实的,凡是现实的东西都是合乎理性的

麦克阿瑟:我们真正的敌人坐在克里母林宫里,如果和中国开战,那将是在错误的时间,错误的地点,和错误的对手打了一场错误的战争。

发表在 文史 | 标签为 , , | 留下评论