Internet Explorer 7/8 和窗口函数是空对象

2024-02-02

在 Internet Explorer 8 中(也适用于 IE7/8 模式下的 IE9),以下代码会发出警报object and undefined而不是预期的function和类似的东西function() { [native code] }.

alert("typeof window.setTimeout = " + typeof window.setTimeout);  // object
alert("window.setTimeout.apply  = " + window.setTimeout.apply );  // undefined

Try it: http://jsfiddle.net/BsvZw/5/ http://jsfiddle.net/BsvZw/5/

为什么会发生这种情况?获得实际的解决方法是什么setTimeout?

Update

我正在尝试创建一个包装器setTimeout:

var _oldSetTimeout = window.setTimeout;
window.setTimeout = function ()
{
    // ...

    return _oldSetTimeout.apply(this, arguments);    // this is place where IE 7/8 says 'Object doesn't support this property or method'
                                                // and _oldSetTimeout looks like an empty object
};

为什么会发生这种情况?

基本上,因为 IE 讨厌 Web 开发人员并且正在扰乱你。

More seriously, things provided by the browser implementation that are not part of the core Javascript language may be classified as host objects http://github.com/#x4.3.8. When it comes to host objects all bets are off and they are basically allowed to do anything they want[1] without needing to respect usual Javascript semantics.

获得实际 setTimeout 的解决方法是什么?

我知道它真的很难看,但是您可以执行 if-else-if 链直至预定义数量的参数。在 setTimeout 的情况下,这不应该是一个大问题,因为您不需要超过 2 或 3 个参数。

var _oldSetTimeout = window.setTimeout;
window.setTimeout = function (a1, a2, a3)
{
   switch(arguments.length){
       case 0:  return _oldSetTimeout();
       case 1:  return _oldSetTimeout(a1);
       case 2:  return _oldSetTimeout(a1, a2);
       default: return _oldSetTimeout(a1, a2, a3);
   }
};

虽然这是一个非常丑陋的解决方案,但有时这是唯一的方法。例如,也无法使用可变参数调用构造函数。


[1] 为了让您了解主机对象有多么邪恶,前几天我必须对 DOM 节点/文档中的 XPath 方法进行特征检测。而不是通常的if(node.selectNodes)我必须使用的测试if("selectNodes" in node)因为节点是 IE 中的主机对象,只需访问 selectNodes 属性实际上就会调用它,从而给我一个“参数数量不正确”的异常!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Internet Explorer 7/8 和窗口函数是空对象 的相关文章

  • jQuery 会在过滤选择器中的其他参数之前搜索 ID 吗?

    这个问题与性能有关 如果我使用如下选择器 myID a Does this find myID and filter by a 或者我应该这样写声明 myID find a 我不确定 jQuery 是否足够聪明 可以首先使用 ID 执行此语
  • Google Closure 和生成的 getter/setter

    我正在尝试让 KineticJS 与 Google Closure Compiler 一起使用 然而 KineticJS 根据变量的名称生成它的 getter 和 setter 像这样的事情 add getter and setter me
  • Angular 在 Img 末尾添加额外变量 %E2%80%8B

    http myimage png E2 80 8B 我刚刚复制粘贴了这个图像网址 但它最后添加了一些奇怪的数据 并且图像没有显示 但在代码上它看起来很完美 我尝试过类似 Angular 的东西 var imageSafeUrl this s
  • 工厂函数方法不更新变量

    我正在尝试设置一个工厂函数 该函数将更新所述工厂函数中特定变量的值 这看起来实现起来很简单 但是 每当我测试它时 我都会得到变量的原始设置值 而不是更新后的值 我确信在范围界定方面我缺少一些细微差别 但这里到底发生了什么 const fac
  • 范围滑块 javascript 以小时和分钟为单位

    我试图分别以小时和分钟为单位显示滑块的值 我对 JS 还很陌生 并且仍在尝试了解它是如何工作的 到目前为止 我所拥有的是一个工作滑块 其最大值为 1440 24 小时内的分钟 在 JS 中 我尝试将其划分为小时和分钟 并使用 innerHt
  • 无法加载资源:服务器在已部署的 React.js 项目中响应状态为 404(未找到)

    当我将 React 项目部署到 Surge 中时 构建成功并且可以获取应用程序 URL 但是当我链接到 URL 时 我可以在检查控制台中看到一个空白页面和一些错误 Failed to load resource the server res
  • GraphQL:从对象构建查询参数

    如果我有一个对象 where publishedAt lt 2018 01 01 如何将其转换为适合查询参数的字符串 articles where publishedAt lt 2018 01 01 这看起来是一个有趣的库 我建议检查一下
  • EXT JS中有全局变量吗

    在 java 和 C 中 我们可以全局存储变量并从项目中的任何位置访问它的值 比如说 我在一个名为Residence我正在保存residenceNumber这是一个INT到一个名为的全局变量houseNumberGlobalVariable
  • JavaScript 回调的效率

    我只是想证实我的一个怀疑 我偶然发现了一篇文章 建议按以下方式使用 Socket io var app require express createServer var io require socket io listen app app
  • JSON 解析错误 - JSON 中位置 1 处出现意外标记 o

    我需要获取一个 JSON 对象并记录标题控制台以实现自动完成功能 我的 json 的示例如下 title Example 1 url http www example1 com title Example 2 url http www ex
  • Puppeteer 登录 Instagram

    我正在尝试使用 Puppeteer 登录 Instagram 但不知何故无法登录 你能帮助我吗 这是我正在使用的链接 https www instagram com accounts login https www instagram co
  • 使用 javascript 和 jQuery UI datepicker 获取工作日数

    我有两个日期选择器 我可以从中计算天数 而无需计算星期六和星期日 但我想在周五和周六这样做 我尝试过一些不同的方法但失败了 对我来说 处理不包括周六和周日的天数很容易 但处理周五和周六的天数则不然 以下是我的 javascript 代码 f
  • Google 闭包编译器使用 WebStorm

    我喜欢用谷歌闭包编译器 https developers google com closure compiler in WebStorm https www jetbrains com webstorm 我已经通过 npm 下载了它 npm
  • Django 管理中的自定义依赖下拉菜单

    我有一个按阶段模型的项目外键 我很难在 Django 管理页面中创建依赖的下拉列表 我想当用户从该项目的 项目下拉 阶段选择一个项目时 在第二个下拉菜单中显示 实现这一目标的最佳方法是什么 如果下拉列表根据其父级的值来过滤项目 那就太好了
  • Chrome 扩展程序导致 DOM 闪烁,该扩展程序会在页面加载之前删除 DOM 元素

    我正在编写一个 chrome 扩展 我想在页面加载之前删除内容 例如this http tech blog tomchambers me 2016 01 13 How to write a simple page rewriting Chr
  • Bootstrap 多选限制问题

    我使用创建了一个多选下拉列表引导多选 http davidstutz github io bootstrap multiselect 我需要在选项选择中设置一个限制 这里我将其设置为 5 如果达到限制 我只需禁用其他选择选项 它就可以完美工
  • 使用 _.extend() 进行 JavaScript 继承

    有什么区别 Employee prototype Object create Person prototype and extend Employee prototype Person prototype 两者都给出相似的结果 输出 但下划
  • 删除移动设备上的 adsense

    我正在研究响应式设计 但在使用 adsense 时遇到了问题 我有一个广告应该显示在桌面设计上 但不能显示在移动设计上 因此 只有在桌面上查看网站时 才应将广告代码放置在 html 中 css 可以使用 display none 但这违反了
  • 当 JavaScript 抛出异常时不要停止它

    我正在使用 JavaScript 编写一个 Windows 边栏小工具 现在我想捕获所有 JavaScript 异常并将其记录到文本文件中 一个问题是 当任何一行抛出异常时 下一行将不会被执行 是否可以自动捕获异常 以便执行以下 JavaS
  • 什么是标志变量?

    最近我遇到了标志变量 但我不知道它们的作用 我不太确定何时使用标志变量以及如何使用它 我用 Google 搜索了它 但没有任何与我的上下文 JavaScript 相关的具体示例 标记变量的定义和使用 http www javascriptk

随机推荐

  • SWT/JFace 还是 Eclipse RCP?

    选择 Eclipse 富客户端平台作为我的应用程序基础而不是仅使用 SWT JFace 的原因有哪些 Eclipse RCP 不仅仅是一个 GUI SWT JFace 而是一个OSGi https stackoverflow com que
  • jquery 获取数组的选择选项

    我有点坚持一个 大概很容易解决问题 我想创建将用于网站上所有选择元素的代码 根据分配给 选项 的 标签 属性 我想隐藏所有其他 div 元素 这些元素的类与此特定 选择 菜单中 选项 的其他 标签 值相同 让我演示一下
  • Android L 无法绘制虚线作为可绘制背景

    Android L 无法绘制虚线作为可绘制背景 如下所示
  • 如何在 PHP 中将数组值转换为小写?

    在 PHP 中如何将数组中的所有值转换为小写 就像是array change key case use array map http php net manual en function array map php yourArray ar
  • Terraform 在 Windows 上启动缓慢。已知问题还是只有我一个?

    在 Windows 上运行 Terraform 二进制文件的执行速度一再缓慢 在 mac linux 上运行应用程序 几乎可以立即启动和完成简单的操作输出 tf仅 无main tf output 0 value cidrsubnet var
  • 无法解析主机

    在我的开发计算机上 这种情况再次随机发生 它在生产服务器上运行良好 所以无论如何 但我仍然需要在这里测试一下 无法解析主机 主机名 主机未找到 我知道这些设置存在安全漏洞 但现在 我更关心的是让它发挥作用 HTTP 地址当然可以正常工作 但
  • Android TextView 视图如何换行?

    我试图让 TextView 将其文本包装在多行中 但它似乎总是在第一行末尾被截断 以下是我认为的相关 XML
  • CouchDB 与 RDBMS 相比有何优势

    我听说过很多关于couchdb http couchdb apache org 最近 我对它提供的功能感到困惑 很难以严格的优势 劣势形式解释所有差异 我建议你自己尝试一下 CouchDB 您首先会注意到的是 初始使用期间的学习曲线与 RD
  • Jquery UI 可拖动绝对而不是相对?

    我有一个包含一些jquery可拖动对象的div 但是如果在任何时候我从页面中删除其中一个可拖动对象 那么这可以移动其余的它们 因为它们是相对定位的 这是一个展示这一点的小提琴 http jsfiddle net VolatileStorm
  • 如何从全局范围内调用 jquery 函数内的方法?

    我正在寻找一种方法来调用 jquery 函数内的方法 示例 在上面的代码中 我如何调用method 全局范围的方法 function fn test function var method function alert test succe
  • 创建私有远程ivy存储库

    我已经做了很多搜索 但无法将所有部分放在一起 我想在我们的一台服务器上创建一个 ivy 存储库 我想将其锁定 使其成为私有的 然后能够从 Gradle 发布到此存储库 我知道如何使用 Gradle 进行发布 并且我可以使用 Gradle 创
  • npm 命令在 ubuntu 上不起作用

    我在 Ubuntu 14 04 上安装了 node 和 npm 当我尝试使用任何 npm 命令时 出现以下错误 usr local lib node modules npm lib config cmd list js 113 module
  • jQuery UI 的对话框无法在 ASP.NET 上运行

    我有以下测试 ASPX 页面
  • Visual Studio 2019 IntelliTest 与 .NET Core、.NET Standard 的兼容性?

    我正在最新版本的 Visual Studio Enterprise 中评估 Intellitest 据我自己在各个网站上的尝试和研究来看 IntelliTest 似乎只与 NET Framework 兼容 不兼容 NET Standard
  • HBase:复制是如何工作的?

    我目前正在将 HBase 作为数据存储进行评估 但有一个问题没有得到解答 HBase 在许多节点上存储同一对象的许多副本 也称为复制 由于HBase具有所谓的强一致性 相比之下最终一致 它保证每个副本在读取时返回相同的值 据我了解 HBas
  • 如何检查公共MSMQ是否为空

    有没有办法检查公共 MSMQ 是否为空 对于私有 MSMQ 来说很简单 private bool IsQueueEmpty string path bool isQueueEmpty false var myQueue new Messag
  • TFS 2010:服务不可用 503

    我已经尝试解决这个问题大约一周了 我在微软网站上发布了这个问题 但只收到了一条回复 这并没有解决我的问题 以下是我在微软网站上的帖子的组合 我在 Window 7 PC 64 位上安装并配置了 TFS 2010 当我导航到http loca
  • python 中压缩时出现 LEN 错误

    def shufflemode import random combined zip question answer random shuffle combined question answer zip combined 但后来我收到错误
  • 为什么 IQueryables 没有 SingleOrDefaultAsync?

    以下代码无法编译 因为 SingleOrDefaultAsync 不是 GetAppointments 的合适扩展 我只是想知道为什么 public IQueryable
  • Internet Explorer 7/8 和窗口函数是空对象

    在 Internet Explorer 8 中 也适用于 IE7 8 模式下的 IE9 以下代码会发出警报object and undefined而不是预期的function和类似的东西function native code alert