加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:39:09 所属栏目:百科 来源:网络整理
导读:问题症状: 当页面中嵌入了flash,并且页面的地址中含有“片段标识”(Fragment Identifier,即网址#之后的文字)时,用IE浏览器访问此页面,会发现flash加载完成后,浏览器窗口的标题末尾会被加上“片段标识”,或是整个标题被替换成“片段标识”。 问题出

问题症状:

当页面中嵌入了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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读