Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.javascript > #17396

Re: Refreshing ActiveX controls

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

Show all headers | View raw


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


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