javascript - Javascript "apply"函数在 window.external 扩展对象中不存在

标签 javascript internet-explorer external

我在 IE8(也可能是任何 IE 版本)上使用 javascript 扩展(又名 window.external)来公开某些功能。
我正在尝试调用 apply 函数,该函数(根据 here 应该是)在 window.external 对象的每个 JS 函数中原生嵌入函数,但浏览器不断抛出异常,表明该函数不存在 apply 函数。

例如,这段代码有效:

function onDataReceived(url, success, status, data, errorMessage) {
    alert(onDataReceived);
}

function innerTest() {
    alert(arguments[0] + ", " + arguments[1]);
}

function outerTest() {
    innerTest.apply(null, arguments);
}

outerTest("hello", "world");

// alerts "hello, world"

但是这段代码抛出异常:

function outerTest() {
    window.external.innerTest.apply(null, arguments); // <-- exception
}

outerTest("hello", "world");

底线是 - 我需要将未知数量的参数传递给外部函数,到目前为止我已经走到了死胡同......

有什么想法吗?

编辑:
我接受了 Mike Samuel 的回答,因为(据我所知)apply 函数在 window.external 对象中不存在,因为它不是 native javascript 对象。< br/> Mike 建议的“最坏情况”是我目前最终所做的。
谢谢

最佳答案

如果 window.external 是一个宿主对象,或者来自一些不希望其原型(prototype)暴露给页面逻辑的扩展机制,那么它可能是一个函数,但可能没有通常的 调用并申请成员(member)。幸运的是,您可以调用 call 并应用 apply:

Function.prototype.apply.call(window.external, null, [argumentsToExtension])

或者是真正的元,

Function.prototype.apply.apply(window.external, [null, [argumentsToExtension]])

其中 null 是作为 this 的值传递的,通常的调用/应用规则应将其解释为 window

编辑:

如果这不起作用,您总是可以退回到黑客三 Angular 。

function triangleOfHackery(obj, methodName, args) {
  switch (args.length) {
    case 0: return obj[methodName]();
    case 1: return obj[methodName](args[0]);
    case 2: return obj[methodName](args[0], args[1]);
    case 3: return obj[methodName](args[0], args[1], args[2]);
    ...
  }
}

关于javascript - Javascript "apply"函数在 window.external 扩展对象中不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6514082/

相关文章:

javascript - 面包屑路由器动态

javascript - Div 动态调整为窗口高度,但在将更多内容添加到 HTML 时失败

javascript - 通过 VBA 从 IE 页面的下拉列表中选择一个值

CSS 位置固定在 IE 11 中不起作用

ios - ios 上的外部键盘选项卡事件

javascript - 如何在 Codeigniter 中添加和使用外部 js 文件?

javascript - 如果页面中不存在 DOM 元素,我如何移动到下一个迭代?

javascript - Firebase 事务错误 : [Error: Set]

internet-explorer - IE 中的 jQuery 缓存

javascript - 如何在 NextJS 中处理重定向到外部 url?