Sie können ActiveXObject()
überschreiben.
Dies bedeutet, dass Sie versuchen können, ein transparentes Proxy-Objekt um das tatsächliche Objekt zu erstellen und Methodenaufrufe anzuhängen. Dies würde bedeuten, dass Sie für jede Methode und Eigenschaft Ihres ActiveX-Objekts einen Proxy erstellen müssen, sofern Sie nicht absolut sicher sind, dass überhaupt kein Code eine bestimmte Methode oder Eigenschaft aufruft.
Ich habe einen kleinen Wrapper für das Objekt "MSXML2.XMLHTTP"
gebaut. Es gibt wahrscheinlich alle Arten von Problemen, die in ausführen können, so nehmen, dass mit einem Körnchen Salz:
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);
}
Haftungsausschluss: Vor allem der Asynchron/onReadyStateChange Handhabung ist wahrscheinlich nicht richtig, und der Code kann andere Probleme als Gut. Wie gesagt, es ist nur eine Idee. Mit Vorsicht behandeln.
S.S .: Ein COM-Objekt unterscheidet nicht zwischen Groß- und Kleinschreibung, wenn es um Methoden- und Eigenschaftsnamen geht. Dieser Wrapper ist (wie alle JavaScript) abhängig von Groß- und Kleinschreibung. Zum Beispiel, wenn Ihr Code sowohl "Send()"
und "send()"
nennen passiert, werden Sie ein Skelett brauchen „Send()“ Methode in der Wrapper auch:
o.Send = function() { return this.send.apply(this, arguments); };
Ich glaube nicht, dies möglich wird. Haben Sie eine Quelle für das Tconnetor? Können Sie die Binärdateien an die Clients weitergeben und/oder Ihre eigenen Binärdateien verteilen, wenn Sie sie nicht besitzen? – AnthonyWJones
Ich habe nicht die Quelle, aber ich habe eine Lizenz, die es mir erlaubt, sie frei zu verteilen. Wie auch immer, warum ist das alles wichtig, wenn ich ein Proxy-Javascript-Objekt für Proxy-Aufrufe an das ActiveX-Objekt mache? – mkoryak
@mkoryak: Ich habe den Code in meiner Antwort aufgeräumt/aktualisiert, und ich habe eine verknüpfende Antwort in Ihrer anderen Frage erstellt. – Tomalak