- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在 Internet Explorer 8 中(也适用于 IE9 的 IE7/8 模式)以下代码警告 object
和 undefined
而不是预期的 function
和类似 function() { [native code] }
的东西。
alert("typeof window.setTimeout = " + typeof window.setTimeout); // object
alert("window.setTimeout.apply = " + window.setTimeout.apply ); // undefined
试一试:http://jsfiddle.net/BsvZw/5/
为什么会这样?获取实际 setTimeout
的解决方法是什么?
更新
我正在尝试围绕 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
};
最佳答案
Why is this happening?
基本上,因为 IE 讨厌 Web 开发人员并且正在惹你。
更严重的是,浏览器实现提供的不属于核心 Javascript 语言的内容可能被归类为 host objects .当谈到宿主对象时,所有赌注都被取消了,它们基本上可以做任何他们想做的事[1],而无需遵守通常的 Javascript 语义。
What would be a workaround to get the actual 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("selectNodes"in node)
而不是通常的 if(node.selectNodes)
测试,因为节点是 IE 中的主机对象并且只访问 selectNodes属性实际上会调用它,给我一个“参数数量不正确”的异常!
关于javascript - Internet Explorer 7/8 和窗口函数是空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11619826/
像其他人一样,我需要在 Internet Explorer 6 和 Internet Explorer 7 上测试我的代码。现在,Internet Explorer 8 为开发人员提供了一些很棒的工具
我已经浏览了几个小时的注册表,但似乎无法找到控制 Internet Explorer 临时 Internet 文件设置的注册表。我想从自动更改为其他内容。 最佳答案 HKCU\Software\Mic
这个问题在这里已经有了答案: 10年前关闭。 Possible Duplicate: Running Internet Explorer 6, Internet Explorer 7, and Int
作为一名开发者,我发现新的 Internet Explorer 版本完全是一场噩梦。我关闭了 Windows 功能,但无法安装 Internet Explorer 10 。它说它已经安装,但事实并非如
是否有任何分析器工具可以调试DOM中的哪个javascript /对象导致Internet Explorer挂起/崩溃。 CPU使用率将超过60%,我想知道其背后的原因,是哪个脚本/ Flash Ob
我正在尝试确定Internet Explorer上TTF字体格式的支持状态。 (我手头没有任何Windows计算机可以尝试。)The table at caniuse指出,从版本9开始的IE支持TTF
是否可以在 Internet Explorer 中切换多个版本的 JDK/JRE? 想要使用 jdk 1.4、jdk 5 和 jdk 6。 谢谢,迈克尔 最佳答案 据我所知,这并不容易做到,因为 IE
这应该是IE8下载问题的老问题了。我使用 PHP 来设置响应头,如: header("Pragma: public"); header("Expires: 0"); header("Content-t
这个问题在这里已经有了答案: 10年前关闭。 Possible Duplicate: Running Internet Explorer 6, Internet Explorer 7, and Int
我正在使用新的Internet Explorer 11开发人员工具将文档模式切换为“8”,但条件注释仍然被忽略,也就是说,它们没有被正确解析并且表现得像普通注释。因此,浏览器不会请求/加载条件注释内的
我在我的一个站点上遇到 Internet Explorer 6 问题,我真的希望我安装它而不是 Internet Explorer 7。有没有一种快速的方法来做到这一点? 最佳答案 下载Microso
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and t
如何访问 Internet Explorer 运行实例的经典 Internet Explorer COM 自动化对象?也就是说,如果我在多个窗口中打开 Internet Explorer,如何从 Po
string filename = Server.UrlPathEncode(Path.GetFileName(_Filename))); Response.AddHeader("Content-Di
当我尝试使用 Apache 2.2 在 Windows7(64 位)上的 IE9 或 IE10 中打开 localhost 时,解析 URL 需要很长时间。其他浏览器没有问题并立即解析 URL,只有
我有一个批处理文件,必须启动 Internet Explorer 并打开 www.google.com .当整个页面加载完成时,它应该终止 IE 进程,即关闭该系统中的所有 IE 实例。我的批处理文件
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6 个月前关闭。 Improve t
基本上,无论我使用 IE 访问哪个网站,我都可以看到那些黑色/白色形状,一旦我将鼠标移到它们上,它们就会消失。 想知道是否有人知道可能导致这种情况的原因? 另外:http://imageshack.c
我检查了所有注册表,但找不到所有已安装扩展的列表。 此时,IE 扩展/加载项的任何一般位置都会有所帮助。 最佳答案 取自 here : 浏览器帮助对象 - 旨在增强浏览器功能的浏览器插件。 条目可以在
这是一个两部分的问题。我正在构建一个网页,我需要知道: 有没有办法检测 IE 是否启用了平滑滚动(如果是,如何)? 有没有办法强制 IE 关闭我网页的平滑滚动功能? 明确地说,我不是在问如何关闭整个计
我是一名优秀的程序员,十分优秀!