mko*_*yak 8 javascript proxy activex
我想添加一些功能跟踪javascript中对ActiveX对象方法的某些调用.
我通常像这样创建我的activeX对象:var tconn = new ActiveXObject("Tconnector");
每次在tconn和activeX控件的所有其他实例上调用open方法时,我都需要记录.
我不能修改tconn的原型,因为它没有!
我认为我可以创建一个伪ActiveXObject函数,它创建一个代理对象来代理对真实代理的调用.你能帮帮我吗?
注意:编写直接包装器是不可能的,因为在应用程序中已经有1000次调用此activeX.
Tom*_*lak 13
你实际上可以覆盖ActiveXObject().
这意味着您可以尝试围绕实际对象构建透明代理对象并挂钩方法调用.这意味着您必须围绕ActiveX对象的每个方法和属性构建代理,除非您绝对确定没有任何代码调用特定方法或属性.
我为"MSXML2.XMLHTTP"对象构建了一个小包装器.你可能会遇到各种各样的问题,所以拿出一些盐:
var ActualActiveXObject = ActiveXObject;
var ActiveXObject = function(progid) {
var ax = new ActualActiveXObject(progid);
if (progid.toLowerCase() == "msxml2.xmlhttp") {
var o = {
_ax: ax,
_status: "fake",
responseText: "",
responseXml: null,
readyState: 0,
status: 0,
statusText: 0,
onReadyStateChange: null
// add the other properties...
};
o._onReadyStateChange = function() {
var self = o;
return function() {
self.readyState = self._ax.readyState;
self.responseText = self._ax.responseText;
self.responseXml = self._ax.responseXml;
self.status = self._ax.status;
self.statusText = self._ax.statusText;
if (self.onReadyStateChange) self.onReadyStateChange();
}
}();
o.open = function(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword) {
varAsync = (varAsync !== false);
this._ax.onReadyStateChange = this._onReadyStateChange
return this._ax.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword);
};
o.send = function(varBody) {
return this._ax.send(varBody);
};
// add the other methods...
}
else {
var o = ax;
}
return o;
}
function Test() {
var r = new ActiveXObject('Msxml2.XMLHTTP');
alert(r._status); // "fake"
r.onReadyStateChange = function() { alert(this.readyState); };
r.open("GET", "z.xml");
r.send();
alert(r.responseText);
}
Run Code Online (Sandbox Code Playgroud)
免责声明:特别是async/onReadyStateChange处理可能不正确,代码也可能有其他问题.正如我所说,这只是一个想法.小心轻放.
PS:对于方法和属性名称,COM对象不区分大小写.这个包装器(就像所有JavaScript一样)区分大小写.例如,如果你的代码恰好通话双方"Send()"和"send()",您将需要一个骨架"发送()"方法在包装,以及:
o.Send = function() { return this.send.apply(this, arguments); };
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6946 次 |
| 最近记录: |