javascript - 当存在多个比较运算符时,为什么 onkeypress 不使用 IE 调用 javascript 函数

标签 javascript html internet-explorer

最初的问题是,从网络位置启动时,Internet Explorer 调用脚本是否存在一些问题,特别是我的问题与脚本的特定语法有关?

我有一组 html 文件,它们使用 onkeypressonkeydown 事件模拟工作中的古老系统来调用 JavaScript 函数,指定在特定情况下导航到哪个页面。键被按下。

这是一些精简的示例代码(用于按数字键盘 ENTER),其中包含实际文件的所有元素并复制了我遇到的确切问题:

<!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>

如果我从桌面启动该文件,它会在屏幕底部提示:

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

如果我单击“允许阻止的内容”,则按下数字键盘 Enter 时该函数将按预期调用。

但是,当从网络驱动器位置启动时,不会提示脚本或 ActiveX 控件受到限制,并且不会调用该函数。 (我还测试了用 window.alert("Hello World") 替换 document.location = "http://www.google.com.au" 并出现弹出窗口从桌面启动时有效,但从网络驱动器启动时无效。

因此,无论出于何种原因,我确定必须有一些网络设置(可能超出我的控制范围)来防止这种情况发生。

但是,奇怪的是,如果我们将函数替换为以下内容,则完全没有问题:

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

TL/DR

当从网络驱动器位置启动 html 文件并且该函数有 2 个条件 if (x == 13 && y === 3) 时,不会调用该函数,但仅当该函数有效时有一个条件 if (x == 13) 函数按预期调用。

当从桌面启动 html 文件时,IE 会阻止脚本/ActiveX 并提示允许它们,如果允许,两个函数都会成功调用。

注意

  1. 我的工作场所主要使用 Internet Explorer,并且首选使用 IE 来处理这些文件。
  2. 我对系统或网络的设置没有影响,这只是我们能够利用我们拥有的少量资源实现一些系统模拟以进行训练的一种方式。
  3. 首选使用数字键盘 ENTER 来调用该函数,因为这样可以更准确地模拟系统。
  4. 我确实找到了一个非常相似的问题 here但是它没有回答我/问题(我也根据评论进行了调试,开发者控制台中没有错误)。

我们目前使用的IE版本:11.0.9600.19002

最佳答案

因此,在 @h77 的评论中强烈提示检查 y 的值,我们发现问题的根本原因是 IE 以兼容模式显示 Intranet 站点。

当仔细观察调试控制台时,我们注意到以下消息:

The attached page targets document mode 7. Some console APIs and features may not be available.

这引导我here这激发了我的大脑认识event.location IE7 无法理解。

IE11 runs compatibility mode as IE7event.location is compatible with IE9 and above ,这回答了问题。

在保持“兼容模式”打开的情况下解决此问题的方法是添加 <meta http-equiv="X-UA-Compatible" content="IE=Edge" /><head>标签。

关于javascript - 当存在多个比较运算符时,为什么 onkeypress 不使用 IE 调用 javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50595311/

相关文章:

javascript - 错误 : read ECONNRESET using the request module for mode. js

javascript - 禁用和启用 css 过渡以初始化位置

html - 删除绝对定位 div 周围的空白空间

javascript - 使用 javascript 在 Chrome 中打开选项卡式窗口

html - 使用@media 屏幕使此按钮响应

Javascript,测试是否支持 ScrollBy 行为 "smooth"

javascript - Javascript-我可以一次更改所有音频元素的音量吗?

c# - 系统中存在的 dot Net Web 浏览器对象和 Internet Explorer 之间有什么关系?

css - 本地文件上的 Internet Explorer "CSS was ignored due to mime type mismatch"(无服务器)

java - 当 ie7 和 ie8 说 "to help protect your bla bla"时,我怎么能意识到?因为它阻止我的 servlet 将字节数组作为文件下载