IE标题被自动修改为网址片段标识(#之后的文字)的解决方案

4 篇文章 0 订阅

问题症状:

当页面中嵌入了flash,并且页面的地址中含有“片段标识”(Fragment Identifier,即网址#之后的文字)时,用IE浏览器访问此页面,会发现flash加载完成后,浏览器窗口的标题末尾会被加上“片段标识”,或是整个标题被替换成“片段标识”。


问题出现条件:

已知会导致问题的软件版本:IE6,Flash Player 11.0.1.152

此问题目前只发现在IE浏览器中有过出现,IE6、7、8中均有过出现。


问题原因:

经测试跟Flash嵌入的方式无关(并非swfobject或者其他脚本组件的问题)。

可能是ActiveX版Flash播放器中的bug导致无意中修改了document.title的值,具体原因暂未进一步分析。

PS:以前也发现过Flash播放器插件在处理脚本通讯时,解析数据的某些bug,那么这次会不会也是类似的原因呢?


解决办法:

利用IE特有的一个事件处理:

(function() {
	var rememberTitle = document.title; // 记住原有的窗口标题

	try { // try-catch 用于兼容不支持attachEvent方法的浏览器
		document.attachEvent('onpropertychange', function(){
			if (document.title != rememberTitle) { // 此判断一定要加上,否则会导致递归调用堆栈溢出
				document.title = rememberTitle;
			}
		});
	} catch (e) {
		// noop
	}

	document.setTitle = function(newTitle) { // 如果需要自定义修改标题,请使用此方法替代“document.title = xxx”语句
		rememberTitle = newTitle;
		document.title = newTitle;
	};
})();

参考:

IE title changes to <afterHash> if the page has a url with '#' , and has flash/swf embedded in it - Stack Overflow

RFC 2396 4.1. Fragment Identifier


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值