You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IE从网络位置运行时,含多比较运算符的onkeypress为何无法调用JS函数?

IE从网络驱动器打开时带双条件的键盘事件函数失效问题

我在工作中需要维护一组模拟旧系统的HTML文件,这些文件通过onkeypress或onkeydown事件绑定JavaScript函数,实现按下特定按键时跳转页面的功能。最近遇到了一个非常奇怪的问题,具体情况如下:

复现用示例代码

下面是精简后的测试代码,保留了实际文件的核心元素,可以100%复现问题(针对数字小键盘回车键的触发逻辑):

<!DOCTYPE html> 
<html> 
<head> 
<style> 
body { margin: 0; } 
img { margin: 0; border: 0; } 
</style> 
<script> 
function nav() { 
    var x = event.keyCode; 
    var y = event.location; 
    if (x == 13 && y === 3) { 
        document.location = "http://www.google.com.au" 
    } 
} 
</script> 
</head> 
<body onkeypress="nav()"> 
<map name="test"> 
<area href="http://www.google.com.au" title="Alternate naviagion" shape="rect" coords="131,680,160,705"> 
</map> 
<img src="ThisPagesImage.png" alt="" usemap="#test"> 
</body> 
</html>

不同打开方式的表现

从本地桌面打开

IE底部会弹出提示:

Internet Explorer has restricted this webpage from running scripts or ActiveX controls. [Allow blocked content]

点击「允许阻止的内容」后,按下数字小键盘回车键可以正常触发nav()函数,实现页面跳转。

从网络驱动器打开

完全没有脚本/ActiveX控件受限的提示,但nav()函数完全无法被调用——我甚至把代码里的document.location替换成window.alert("Hello World")测试,桌面打开能正常弹窗,网络驱动器打开则毫无反应。

最奇怪的差异点

如果把nav()函数改成仅检查keyCode的单条件版本,网络驱动器打开时就完全正常,函数能被正常触发:

function nav() { 
    var x = event.keyCode; 
    if (x == 13) { 
        document.location = "http://www.google.com.au" 
    } 
}

核心问题总结

当HTML文件从网络驱动器打开时,包含双条件判断(同时检查event.keyCode和event.location)的函数无法被调用;但仅检查event.keyCode的单条件函数可以正常运行。而从本地桌面打开时,允许脚本权限后两个版本的函数都能正常工作。

我的限制条件

  • 工作场所主要使用Internet Explorer,必须优先适配IE环境
  • 我无法控制系统或网络设置,只能用现有资源来实现培训用的旧系统模拟
  • 必须优先使用数字小键盘回车键来触发函数,这样才能准确模拟原系统的操作逻辑
  • 已经查找过相似问题但没有找到有效解答,调试时IE开发者控制台也没有任何报错信息

当前使用的IE版本:11.0.9600.19002

内容的提问来源于stack exchange,提问作者Samuel Everson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:09:18