我正在支持IE浏览器中使用的旧Lotus Notes应用程序 一切都很好,直到很少有用户开始使用IE11。
无效的JS代码
document.all("RunAgentCreateAns").click()
RunAgentCreateAns 是Lotus Notes中的按钮ID。
相同的代码在IE9和IE8中运行。不知道为什么它在IE11中不起作用
答案 0 :(得分:5)
IE11不支持document.all()
。请改用document.getElementById()
。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ie/ms537434(v=vs.85).aspx。
答案 1 :(得分:0)
虽然MS文档明确表示他们不支持document.all,但是一些程序化测试显示IE11“悄然”仍然 支持document.all,显然。
在IE11中,document.all
本身就像在正确的功能测试中使用的那样,是'假的',这意味着它将无法通过功能存在测试 - 因为任何不支持的功能都应该如此。但是,如果您直接使用它,例如document.all('fieldname'),您仍然会获得ID为'fieldname'的元素的引用。
考虑以下HTML代码段,该代码段已在IE11版本11.0.9600.17041上进行了测试:
<html>
<script language="javascript">
function testDA(){
if (document.all){
alert('Yes: ' + document.all['foo'].value);
} else {
alert('No: But...' + document.all['foo'].value);
}
var x = document.all['payday'];
x.click();
var y = document.all('payday');
y.click();
document.all('payday').click();
}
function clicked(){
alert('clicked.');
}
</script>
<form>
<button onclick='testDA()'>Button 1</button>
<button id='payday' onclick='clicked()'>Button 2</button>
<input type='text' id='foo' value='I am not here.'>
</form>
</html>
将此页面加载到IE11中,然后单击“按钮1”,您将看到一个警告对话框,弹出“否:但是......我不在这里。”。这表明document.all
中的if
返回false,绊倒其他地方。然而,通过该财产的引用显然有效。
请注意,标有Button 2
且ID为'payday'的按钮定义了onclick
处理程序,并通过testDA
在document.all
函数中以编程方式引用该按钮通过数组引用和函数调用引用,以及OP在此处发布的方式的直接引用。在这个测试案例中,所有三个工作 - 在每种情况下,为按钮定义的点击功能触发。
看起来这个“功能”可能是故意的(?)用于兼容性目的,但鉴于MS'docs明确表示它已被删除,“对我来说,它可能会在KB补丁或操作系统的奇思妙想中消失服务包。警告jscriptor。