Sor*_*ami 42 javascript asp.net internet-explorer-9
我的网站在Chrome,Firefox和Internet Explorer 8上运行良好.但在Internet Explorer 9上,只是将鼠标悬停在组件上时会触发非常奇怪的错误.
SCRIPT5007:无法获取属性'ui'的值:object为null或undefined ScriptResource.axd?d = sTHNYcjtEdStW2Igkk0K4NaRiBDytPljgMCYpqxV5NEZ1IEtx3DRHufMFtEMwoh2L3771sigGlR2bqlOxaiwXVEvePerLDCL0hFHHUFdTOM0o55K0&t = ffffffffd37cb3a1,181行character 1914
并且跟随javascript中的错误链接显示了这些代码:
onNodeOver:function(B,A){A.ui.onOver(B)},onNodeOut:function(B,A){A.ui.onOut(B)}
Run Code Online (Sandbox Code Playgroud)
我对如何解决这个错误有点无能为力.我见过这个解决方案,但这对我来说并没有解决问题.
有任何想法吗?
Ste*_*ung 147
许多JavaScript库(尤其是非最近的库)都不能很好地处理IE9,因为它在处理很多事情时会破坏IE8.
嗅探IE的JS代码在IE9中会频繁失败,除非这些代码被重写以专门处理IE9.
在更新JS代码之前,您应该使用"X-UA-Compatible"元标记强制您的网页进入IE8模式.
编辑:不能相信,3年后,我们进入了IE11,并且仍然有上升的选票.:-)现在许多JS库至少应该支持IE9,并且大多数都支持IE10,所以现在你不太可能需要meta标签,除非你不打算升级你的JS库.但请注意,IE10会改变跨域脚本和一些基于CDN的库代码中断的内容.检查您的库版本.例如,CDN上的Dojo 1.9将在IE10上中断,但1.9.1解决了它.
编辑2:嘿,伙计们,你真的需要把你的行为放在一起吧.我们现在在2014年中期!我仍然为此获得投票!修改您的网站以摆脱旧的IE硬编码依赖项!
叹息......如果我知道这是迄今为止我最受欢迎的答案,我可能花了更多的时间来抛光它......
编辑3:现在差不多是2016年.赞成票仍在上升......我猜有很多遗留代码......有一天我们的节目将超过我们...
小智 12
我在IE9中遇到了同样的问题.我按照上面的回答添加了一行:
<meta http-equiv="X-UA-Compatible" content="IE=8;FF=3;OtherUA=4" />
Run Code Online (Sandbox Code Playgroud)
在我<head>和它工作.
我编写了嗅探IE4或更高版本的代码,目前在我公司的客户以及我自己的个人网站的网站上运行良好.
将以下枚举的常量和函数变量包含在页面上的javascript包含文件中...
//methods
var BrowserTypes = {
Unknown: 0,
FireFox: 1,
Chrome: 2,
Safari: 3,
IE: 4,
IE7: 5,
IE8: 6,
IE9: 7,
IE10: 8,
IE11: 8,
IE12: 8
};
var Browser = function () {
try {
//declares
var type;
var version;
var sVersion;
//process
switch (navigator.appName.toLowerCase()) {
case "microsoft internet explorer":
type = BrowserTypes.IE;
sVersion = navigator.appVersion.substring(navigator.appVersion.indexOf('MSIE') + 5, navigator.appVersion.length);
version = parseFloat(sVersion.split(";")[0]);
switch (parseInt(version)) {
case 7:
type = BrowserTypes.IE7;
break;
case 8:
type = BrowserTypes.IE8;
break;
case 9:
type = BrowserTypes.IE9;
break;
case 10:
type = BrowserTypes.IE10;
break;
case 11:
type = BrowserTypes.IE11;
break;
case 12:
type = BrowserTypes.IE12;
break;
}
break;
case "netscape":
if (navigator.userAgent.toLowerCase().indexOf("chrome") > -1) { type = BrowserTypes.Chrome; }
else { if (navigator.userAgent.toLowerCase().indexOf("firefox") > -1) { type = BrowserTypes.FireFox } };
break;
default:
type = BrowserTypes.Unknown;
break;
}
//returns
return type;
} catch (ex) {
}
};
Run Code Online (Sandbox Code Playgroud)
那么你所要做的就是使用任何条件功能,例如......
即. value = (Browser() >= BrowserTypes.IE) ? node.text : node.textContent;
要么 WindowWidth = (((Browser() >= BrowserTypes.IE9) || (Browser() < BrowserTypes.IE)) ? window.innerWidth : document.documentElement.clientWidth);
要么 sJSON = (Browser() >= BrowserTypes.IE) ? xmlElement.text : xmlElement.textContent;
明白了吗?希望这可以帮助.
哦,你可能想在IE10发布后记住QA的Browser()函数,只是为了验证它们没有改变规则.