我目前正在开发一个仅限 IE 的项目,该项目使用主机应用程序提供的外部对象模型。Internet Explorer 允许通过浏览器组件访问此外部对象:http: //msdn.microsoft.com/en-us/library/ie/ms535246 (v=vs.85).aspx
对对象的访问采用 JavaScript 函数调用的形式,类似于:
external.MethodName(arg1, arg2);
最近对应用程序流程的更改之一将围绕这些 JavaScript 调用引入数百甚至数千个 if 语句条件,例如:
if (X) {
external.MethodName(arg1, arg2);
} else {
// do something else
}
与其修改潜在的数千个 HTML 文件,不如重写或重写外部对象的函数以使 if 条件只出现在一个地方似乎是有意义的。通常,这可以在 JavaScript 中通过以下方式完成:
external.OldMethodName = external.MethodName;
external.MethodName = function(arg1, arg2) {
if (X) {
external.OldMethodName(arg1, arg2);
} else {
// do something else
}
};
但是,这会导致“无效的过程调用或参数”脚本错误,因为您不能以这种方式引用外部宿主方法。
我无权访问主机应用程序专有代码来直接更改外部方法。
有什么方法可以使用 JavaScript 来覆盖外部对象的函数,还是需要用 if 语句包装(潜在的)数千次调用(一个非常糟糕的做法)?
更新:在与客户反复多次后,我们设法与第三方供应商联系以更新外部主机方法,这比我们在前端包装方法的方法要好得多。与此同时,我已经接受了保罗的回答。