Path: csiph.com!usenet.pasdenom.info!weretis.net!feeder4.news.weretis.net!newsfeed.straub-nv.de!uucp.gnuu.de!newsfeed.arcor.de!newsspool2.arcor-online.net!news.arcor.de.POSTED!not-for-mail Content-Type: text/plain; charset="UTF-8" Message-ID: <1563677.z3s4TtHaWU@PointedEars.de> From: Thomas 'PointedEars' Lahn Reply-To: Thomas 'PointedEars' Lahn Organization: PointedEars Software (PES) Date: Sat, 01 Dec 2012 16:42:27 +0100 User-Agent: KNode/4.4.11 Content-Transfer-Encoding: 8Bit X-Face: %i>XG-yXR'\"2P/C_aO%~;2o~?g0pPKmbOw^=NT`tprDEf++D.m7"}HW6.#=U:?2GGctkL,f89@H46O$ASoW&?s}.k+&. <1463591.kyDlKFe50m@PointedEars.de> <34728788.KEVs06lIuy@PointedEars.de> Followup-To: comp.lang.javascript MIME-Version: 1.0 Lines: 168 NNTP-Posting-Date: 01 Dec 2012 16:42:28 CET NNTP-Posting-Host: 7daede32.newsspool1.arcor-online.net X-Trace: DXC=MZh=P9al`08]E=H1Q9`787ic==]BZ:af>4Fo<]lROoR1nkgeX?EC@@00E8X5N4L0E2DZm8W4\YJNQ1D[@@=HWk7 X-Complaints-To: usenet-abuse@arcor.de Xref: csiph.com comp.lang.javascript:17396 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 >> >> (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 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,