Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.javascript > #17396
| Message-ID | <1563677.z3s4TtHaWU@PointedEars.de> (permalink) |
|---|---|
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
| Organization | PointedEars Software (PES) |
| Date | 2012-12-01 16:42 +0100 |
| Subject | Re: Refreshing ActiveX controls |
| Newsgroups | comp.lang.javascript |
| References | <k97pll$gnv$1@speranza.aioe.org> <1463591.kyDlKFe50m@PointedEars.de> <k98h0r$g5b$1@speranza.aioe.org> <34728788.KEVs06lIuy@PointedEars.de> <k98r15$bfb$1@speranza.aioe.org> |
| Followup-To | comp.lang.javascript |
Followups directed to: comp.lang.javascript
Cezary Tomczyk wrote:
> W dniu 2012-11-29 23:20, Thomas 'PointedEars' Lahn pisze:
>> Cezary Tomczyk wrote:
>>> Thomas 'PointedEars' Lahn pisze:
>>>> Cezary Tomczyk wrote:
>>>>> Any idea how to refresh ActiveX controls without restarting IE? (or
>>>>> probably any browser that support ActiveX).
>>>> Several. Depends on what *exactly* you are looking for.
>>> I'll try do describe it how it works in steps:
>>>
>>> 1. The user goes to the requested page. Let's say http://www.test.com/
>> There is a real test.com. For examples, please use the .example TLD […]
>> If you have a problem with a Web site, however, it is of course best to
>> post the real URI.
>
> Actually I can not post a real URL, but I am not sure if this could help
> anything. The main point of the problem is elsewhere.
It would help as you do not say which ActiveX control you are trying to
load/install, and one would have a test case this way.
>>> 2. I check if user has already installed required external software.
>>> This software has a specified "ProgID" and ActiveX Class ID.
>>>
>>> Short code:
>>>
>>> var found, obj;
>>>
>>> if (typeof window.ActiveXObject !== 'undefined') {
>>> try {
>>> obj = new window.ActiveXObject('here is full ProgID');
>>> found = typeof obj !== 'undefined';
>>
>> I do not think `obj' is ever going to be `undefined' at this line. You
>> can just as well assign `true', or skip `found' and only work with `obj'
>> (which you might want to initialize with `null').
>
> Not really. I tested in IE9:
>
> var obj = new window.ActiveXObject('NonExistsProgID');
> window.console.log(typeof obj);
>
> The result is: undefined.
I cannot reproduce that:
,----
| >> var x = 42; x = new ActiveXObject("foo"); console.log(x)
| "Automatisierungsserver kann Objekt nicht erstellen."
(That is German for "Automation server can't create object.")
| >> navigator.userAgent
| "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; SLCC1;
| .NET CLR 2.0.50727; eSobiSubscriber 2.0.4.16; .NET CLR 3.5.30729; .NET
| CLR 3.0.30729; .NET4.0C; .NET4.0E)"
`----
That is Internet Explorer 9.0.8112.16421 on Windows Vista Business 32 bit
Service Pack 2.
I think you are mistaken here:
,----
| >> var y = new ActiveXObject("foo");
| "Automatisierungsserver kann Objekt nicht erstellen."
| >> console.log(y)
| PROTOKOLL: undefined
| >> try { var z = new ActiveXObject("foo"); console.log(z); } catch (e) {
| >> console.log(42); }
| PROTOKOLL: 42
`----
(`console' is not supposed to be a property of the object referred to by
`window'.)
If you enter those two lines separately into the script console, each will
be executed in different /Program/s sharing the same lexical environment
(like eval code in non-strict mode).
The first line contains a /VariableStatement/ with an /Initialiser/. If the
automation object cannot be created by `ActiveXObject', it will throw an
exception (whose `message' property value you can see displayed). So the
variable is declared, but it is not initialized later. As a result, it
keeps its original value, in this case the implicit `undefined', whose
string representation is displayed.
But as you can see in the final try-catch statement, if `ActiveXObject'
throws an exception, execution never reaches the following `console.log(z);'
statement in the *same* /Program/, and continues at the `console.log(42);'
statement if the exception is handled (as it is here). This is consistent
with ECMAScript Ed. 5.1, section "12.14 The `try' Statement", and
corresponding sections back to Ed. 3 when exceptions were introduced.
>> See also jsx.net.http.Request.prototype._getXHR() in
>>
<http://pointedears.de/websvn/filedetails.php?repname=JSX&path=%2Ftrunk%2Fhttp.js>
>> (a bit slow currently).
>
> I know that file and I even studied more closely not so long time ago :-)
>
> I see your part of initializing XHR object, but there is also some weird
> parts for me. You define:
>
> x = null;
>
> and later in part between /*@if (@_jscript_version >= 5) and @end @*/ in
> catch(e){} you sets x = null, which I do not know why. It is defined x =
> null at the beginning.
`x = null' in the `catch' branch is probably not necessary now, but maybe
later. I would rather be explicit there.
> Not sure if part for /* IceBrowser */ is still necessary.
I am not sure either. But it is only a small piece of compatibility code
with no noticeable performance impact in case it is not needed, so it is
going to stay there for the time being.
> However, generally speaking code could inspire many coders.
Thank you. As you can read there, it is based on an XHR tutorial by
Jim Ley.
>>> } catch (e) {
>>> }
>>> }
>>>
>>> 3. If "found" is true then this means that required external software is
>>> installed and user will be moved to the next step. If not then I
>>> triggering download process and must wait for end of installation.
>>> External software will do all necessary changes inside ActiveX after
>>> installation is complete.
>>>
>>> Now, I check every n seconds (using setTimeout instead of setInterval)
>>> if required software is already installed. I can not check required
>>> "ProgID" until I restart manually Internet Explorer. That's the problem.
>>>
>>> All I want is to refresh ActiveX list of all Controls and read required
>>> data from ActiveX (check if required "control" is already installed)
>>> without restart Internet Explorer.
>>
>> You should reconsider that approach. There should be an event for the
>> successfully loaded ActiveX control which you can add an event listener
>> for, or the control can execute code itself.
>
> Hm, interesting. If you have any links that can explain more about that
> then I would be glad to get them. In the meantime I will check what
> Google returns about that.
I have not tried, but
<http://msdn.microsoft.com/en-us/library/ms535859(VS.85).aspx#events>
looks promising with regard to the former approach [apparently, `object'
elements do support the `(on)load' event].
As for the latter, it depends on the control. For example, I know that
Flash movies can cause HTML navigation.
PointedEars
--
Sometimes, what you learn is wrong. If those wrong ideas are close to the
root of the knowledge tree you build on a particular subject, pruning the
bad branches can sometimes cause the whole tree to collapse.
-- Mike Duffy in cljs, <news:Xns9FB6521286DB8invalidcom@94.75.214.39>
Back to comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Refreshing ActiveX controls Cezary Tomczyk <cezary.tomczyk@gmail.com> - 2012-11-29 14:58 +0100
Re: Refreshing ActiveX controls Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-11-29 17:42 +0100
Re: Refreshing ActiveX controls Cezary Tomczyk <cezary.tomczyk@gmail.com> - 2012-11-29 21:36 +0100
Re: Refreshing ActiveX controls Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-11-29 23:20 +0100
Re: Refreshing ActiveX controls Cezary Tomczyk <cezary.tomczyk@gmail.com> - 2012-11-30 00:27 +0100
Re: Refreshing ActiveX controls Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-12-01 16:42 +0100
Re: Refreshing ActiveX controls JJ <jaejunks@glegooilma-swapit.com> - 2012-11-29 23:37 +0000
Re: Refreshing ActiveX controls Cezary Tomczyk <cezary.tomczyk@gmail.com> - 2012-11-30 00:53 +0100
Re: Refreshing ActiveX controls JJ <jaejunks@glegooilma-swapit.com> - 2012-12-01 06:36 +0000
Re: Refreshing ActiveX controls Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-12-01 17:12 +0100
csiph-web