问题症状:
当页面中嵌入了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;
};
})();
参考:
RFC 2396 4.1. Fragment Identifier