ASP & MSXML 3.0 How to check ....

User avatar
Encephalon
Уже с Приветом
Posts: 3181
Joined: 29 Jan 2002 10:01

ASP & MSXML 3.0 How to check ....

Post by Encephalon »

How to check from the server if MSXML 3.0 parser is available/installed on client machine? Are there any "ServerVariables" that can represent client's MSXML parser and its version? If not, is that possible to check it on the client side using JavaScript?

In other words -> Application must recognize if client has MSXML parser 3.0 on his/her machine.

Thanks you very much in advance for your thoughts.
PS: The server side script is ASP ...
User avatar
webdeveloper
Уже с Приветом
Posts: 2049
Joined: 12 Jul 2000 09:01
Location: Madison, Wisconsin USA

Re: ASP & MSXML 3.0 How to check ....

Post by webdeveloper »

Это нужно проверить только один раз или много раз на разных серверах?

Можно поробовать вот так
[code:1:63a16a9c42]
<%@Language=JScript%>
<%
Response.Expires=0;
try{
Server.CreateObject("MSXML");
Response.Write("Installed");
}catch(e){
Response.Write("Not Installed");
}
%>
[/code:1:63a16a9c42]
Да захлебнётся кровью тот, кто усомнится в нашем миролюбии, ибо милосердие наше беспощадно...
stockman
Уже с Приветом
Posts: 1731
Joined: 24 Sep 1999 09:01
Location: планета Земля

Re: ASP & MSXML 3.0 How to check ....

Post by stockman »

[quote:c5a57c83a8="Encephalon"]How to check from the server if MSXML 3.0 parser is available/installed on client machine? [/quote:c5a57c83a8]

Сильно сомневаюсь что это можно сделать на сервере, но вот с помощью ServerVariables вы уж точно не проверите. У меня есть скрипт на VbScript, который на клиенте может проверить установлен или нет какой либо COM на машине клиента, но вот как подобное проверить Javscript-ом я сейчас не готов сказать. VbScript для IE может быть к примеру таким:

[code:1:c5a57c83a8]
<SCRIPT LANGUAGE=vbscript>
on error resume next

MSXML3=IsObject(CreateObject("MSXML2.DOMDocument"))

If MSXML3 Then
'есть
Else
'нет
End If
</SCRIPT>
[/code:1:c5a57c83a8]

А, если не секрет, то почему вы не хотите использовать MSXML на стороне сервера непосредственно из ASP? Так на мой взгляд удобнее, да и наличие данного компонента на клиенте вас уже не будет волновать.
Даже и не знаю что сказать!
User avatar
Encephalon
Уже с Приветом
Posts: 3181
Joined: 29 Jan 2002 10:01

Re: ASP & MSXML 3.0 How to check ....

Post by Encephalon »

[quote:d21ff7a2b8="webdeveloper"]Это нужно проверить только один раз или много раз на разных серверах?
[/quote:d21ff7a2b8]

Tолько один раз. Но идея заключается в том, что-бы проверить наличие парсэра у клиента, а не на сервере. В случаи Вашего примера, то Вы делаете проверку на наличие установленного парсэра на самом сервере.

[quote:d21ff7a2b8="stockman"]
А, если не секрет, то почему вы не хотите использовать MSXML на стороне сервера непосредственно из ASP? [/quote:d21ff7a2b8]

Нет, это не секрет.
К клиенту должен лодатьcя скрипт + XML файл, который будет создавать репорт и чертить график на клиенте, используя Мicrosoft Office Chart Component 9.0 из семейства Office Web Components (OWC) . Условие только одно - клиент должен иметь у себя установленный MSXML parser 3й или 4й версии, но не ниже.
Мне неважно откуда делать проверку. Мне вполне подойдёт Ваш вариант на client side с VBScript. Всё что нужно, ето определить если клиент имеет парсэр 3й версии или выше.


Спасибо за идею!
Last edited by Encephalon on 14 May 2002 03:55, edited 2 times in total.
Panam
Уже с Приветом
Posts: 598
Joined: 30 Nov 2000 10:01
Location: Atlanta, GA

Re: ASP & MSXML 3.0 How to check ....

Post by Panam »

[quote:03c87c39c0="Encephalon"]How to check from the server if MSXML 3.0 parser is available/installed on client machine? Are there any "ServerVariables" that can represent client's MSXML parser and its version? If not, is that possible to check it on the client side using JavaScript?

In other words -> Application must recognize if client has MSXML parser 3.0 on his/her machine.

Thanks you very much in advance for your thoughts.
PS: The server side script is ASP ...[/quote:03c87c39c0]

[code:1:03c87c39c0]<object id="MSXML3"
classid="clsid:f5078f19-c551-11d3-89b9-0000f81fe221"
codebase="controls/msxml3.cab#version=8,00,7820,0"
type="application/x-oleobject"
STYLE="display: none">
</object>[/code:1:03c87c39c0]

Но как просто проверить без загрузки - не знаю.
User avatar
Encephalon
Уже с Приветом
Posts: 3181
Joined: 29 Jan 2002 10:01

Re: ASP & MSXML 3.0 How to check ....

Post by Encephalon »

[quote:2126612eb1="Panam"] [code:1:2126612eb1]<object id="MSXML3"
classid="clsid:f5078f19-c551-11d3-89b9-0000f81fe221"
codebase="controls/msxml3.cab#version=8,00,7820,0"
type="application/x-oleobject"
STYLE="display: none">
</object>[/code:1:2126612eb1]

Но как просто проверить без загрузки - не знаю.[/quote:2126612eb1]

Panam,
Спасибо, но я не имею права навязывать клиенту грузить парсер. Я знал про этот САB file, да и проблема может быть в том, что клиент может отказаться лодать парсер, тогда будет очень плохо. Мне просто необходино проверить наличие его у клиента. Если он есть (уже установлен), значит всё cool, но если его нет, значит "Мы пойдём другим путём товарищи (с) " :wink:
Thanks anyway.

PS: Mне кажется, что совет и пример, который предложил stockman, будет самым подходящим. Завта попробую написать свою версию на JavaScript.
stockman
Уже с Приветом
Posts: 1731
Joined: 24 Sep 1999 09:01
Location: планета Земля

Re: ASP & MSXML 3.0 How to check ....

Post by stockman »

[quote:ae788a31e2="Encephalon"]Нет, это не секрет.
К клиенту должен лодатьcя скрипт + XML файл, который будет создавать репорт и чертить график на клиенте, используя Мicrosoft Office Chart Component 9.0 из семейства Office Web Components (OWC) . Условие только одно - клиент должен иметь у себя установленный MSXML parser 3й или 4й версии, но не ниже.
Мне неважно откуда делать проверку. Мне вполне подойдёт Ваш вариант на client side с VBScript. Всё что нужно, ето определить если клиент имеет парсэр 3й версии или выше.
Спасибо за идею!
[/quote:ae788a31e2]

Согласен, тут обрабатывать XML на сервере не лучший вариант, потому что потом данные из xml все равно придется передавать в клиентский компонент.

Кстати буду благодарен, если вы поделитесь потом впечатлениями о работоспособности кода. Изначально он был мной написан для проверки на наличие у клиента компонента "ShockwaveFlash.ShockwaveFlash", и я просто предположил что он вполне подойдет для любого другого компонента. Но это в теории конечно, а на практике я проверил этот метод только на Flash компоненте.
Даже и не знаю что сказать!
User avatar
Encephalon
Уже с Приветом
Posts: 3181
Joined: 29 Jan 2002 10:01

Re: ASP & MSXML 3.0 How to check ....

Post by Encephalon »

[quote:283d52d12c="stockman"]Согласен, тут обрабатывать XML на сервере не лучший вариант, потому что потом данные из xml все равно придется передавать в клиентский компонент.

Кстати буду благодарен, если вы поделитесь потом впечатлениями о работоспособности кода. ....[/quote:283d52d12c]


Вот короткий пример того, что я намудрил c JavaScript. 8O ... Bроде работает .. :?

[code:1:283d52d12c]
<SCRIPT language="JavaScript">
function checkParser()
{
try
{
var oXML = new ActiveXObject("Msxml2.DOMDocument");
if( typeof(oXML) != 'undefined')
{
alert(" MSXML 3.0/4.0 Parser Detected ")
}
else
{
alert(" MSXML Parser v. 3 or 4 was not detected! ")
}
}
catch(e)
{
return false;
}
}
</SCRIPT>
[/code:1:283d52d12c]

Ну ОК. Вроде с парсэром разобрался.
А vот такой вопрос. Можно таким же способом или с серверa определить установлен MS Office на клиентском kомпе, или нет? И как узнать какая версия?
User avatar
vlad12345
Уже с Приветом
Posts: 605
Joined: 14 Feb 2002 10:01
Location: Russia

Post by vlad12345 »

"Msxml2.DOMDocument" еще не гарантирует, что это будет 3-я версия,
а 4-ую точно не "зацепит".

Если не ошибаюсь, то ProgID примерно такие:
"Microsoft.XMLDOM" ~ 1st version
"MSXML2.DOMDocument" - version independent (version 2.6 ??)
"MSXML2.DOMDocument.3.0" - 3rd version
"MSXML2.DOMDocument.4.0" - 4th version
Могут быть заморочки если msxml3 установлена в replace mode.
Тогда пользуясь version-independent ProgID (MSXML2.DOMDocument)
не можешь знать, какая точно версия на нем сидит.
Можно попробовать запросить
XMLDoc.implementation.hasFeature("XSLT", "1.0")
если true, то значит msxml3.

Из-за неразберихи с replace mode в четвертой версии от
этого отказались и 4-ую версию можно активизировать
только с version-dependent ProgID.
User avatar
Encephalon
Уже с Приветом
Posts: 3181
Joined: 29 Jan 2002 10:01

Post by Encephalon »

[quote:a005b3e920="vlad12345"]"Msxml2.DOMDocument" еще не гарантирует, что это будет 3-я версия,
а 4-ую точно не "зацепит".
[/quote:a005b3e920]

Хорошо, я согласен с Вами. Ну что тогда делать? Как зделать эту чёртову проверку и выявить правельную/нужную версию? Неужели этого нельзя зделать? :cry:

[quote:a005b3e920="vlad12345"]..... Можно попробовать запросить
XMLDoc.implementation.hasFeature("XSLT", "1.0")
если true, то значит msxml3. ...[/quote:a005b3e920]

Aaaaaa..... OK
Это уже ближе к телу ... Бум посмотреть как это сработает.
Спасибо Вам!
User avatar
Encephalon
Уже с Приветом
Posts: 3181
Joined: 29 Jan 2002 10:01

Post by Encephalon »

[quote:e7a4dec2b2="vlad12345"]"Msxml2.DOMDocument" еще не гарантирует, что это будет 3-я версия,
....[/quote:e7a4dec2b2]

OK. А как Вам такая проверка? Похоже, что работает ..... :roll:

[code:1:e7a4dec2b2]
<SCRIPT language="JavaScript">
function fCheckParser()
{
try
{
var oXML_Parser = new ActiveXObject("Msxml2.DOMDocument");
if( typeof(oXML_Parser) != 'undefined')
{
if (oXML_Parser.implementation.hasFeature("XSLT", "1.0") == true)
{
alert( "MSXML 3.0/4.0 Parser Detected" )
//Load structure that depends on MSXML3 or MSXML4

}
else
{
alert( "MSXML 2.5/2.6 Parser Detected" )
// Load structure that works only with MSXML v.2.5/2.6
}
}
else
{
alert( "MSXML Parser v. 2.5, 2.6, 3 or 4 was not detected" )
}
}
catch(e)
{
return false;
}
}
</SCRIPT> [/code:1:e7a4dec2b2]
User avatar
vlad12345
Уже с Приветом
Posts: 605
Joined: 14 Feb 2002 10:01
Location: Russia

Post by vlad12345 »

Что касается версии 4, то ее можно взывать только через
new ActiveXObject("Msxml2.DOMDocument.4.0") ... ,
так что вышеприведенная проверка несколько неточна.

Кроме того, боюсь, что в случае установки msxml3
в режиме side-by-side mode, тоже нужно будет пользоваться
version-dependent ProgID т.е. "Msxml2.DOMDocument.3.0",
хотя не уверен, т.к. в особенностях и побочных эффектах
этих modes не очень разбираюсь.
User avatar
Encephalon
Уже с Приветом
Posts: 3181
Joined: 29 Jan 2002 10:01

Post by Encephalon »

[quote:9cdeaf84e0="vlad12345"]Что касается версии 4, то ее можно взывать только через
new ActiveXObject("Msxml2.DOMDocument.4.0") ... ,
так что вышеприведенная проверка несколько неточна.

Кроме того, боюсь, что в случае установки msxml3
в режиме side-by-side mode, тоже нужно будет пользоваться
version-dependent ProgID т.е. "Msxml2.DOMDocument.3.0",
хотя не уверен, т.к. в особенностях и побочных эффектах
этих modes не очень разбираюсь.[/quote:9cdeaf84e0]

Sorry for English. AntiTranslit some how does not work again ...

In other words, as you suggested, that will be more appropriate to use
"Msxml2.DOMDocument.3.0" than just simply “Msxml2.DOMDocument”?
Do I understand you correctly? Did you suggest to specify exact ProgID?


[code:1:9cdeaf84e0]
var oXML_Parser = new ActiveXObject("Msxml2.DOMDocument.3.0");
[/code:1:9cdeaf84e0] ...???
stockman
Уже с Приветом
Posts: 1731
Joined: 24 Sep 1999 09:01
Location: планета Земля

Post by stockman »

Да конечно, vlad12345 абсолютно прав. Я забыл про номер версии.

[quote:2a20a4ae9d="Encephalon"]

In other words, as you suggested, that will be more appropriate to use
"Msxml2.DOMDocument.3.0" than just simply “Msxml2.DOMDocument”?
Do I understand you correctly? Did you suggest to specify exact ProgID?


[code:1:2a20a4ae9d]
var oXML_Parser = new ActiveXObject("Msxml2.DOMDocument.3.0");
[/code:1:2a20a4ae9d] ...???[/quote:2a20a4ae9d]

Но тот Vbscript что я вам давал должен работать и с указанием версии в ProgID. Я и сам раньше проверял Flash-овский ActiveX с указанием номера версии и все работало. Думаю что и ваш Javascript тоже не встретит никаких препятствий. Что касается проверки клиента на присуствие у него MS Office, то что то мне на ум ничего не приходит, особенно с учетом того что вам это надо сделать на сервере.

Попробуйте перенести эту проверку на клиента и проверьте на наличие какой нибудь специфичной компоненты, которая входит только в MS Office, определите есть она или нет и рефрешните страницу, передав данные в нужный вам скрипт. Это единственное что мне пока пришло на ум.
Даже и не знаю что сказать!
User avatar
Encephalon
Уже с Приветом
Posts: 3181
Joined: 29 Jan 2002 10:01

Post by Encephalon »

[quote:a0a778863f="stockman"]Да конечно, vlad12345 абсолютно прав. Я забыл про номер версии.....[/quote:a0a778863f]

stockman, vlad12345 !

Thousands of Thanks to you guys! I appreciate you help!!!
User avatar
vlad12345
Уже с Приветом
Posts: 605
Joined: 14 Feb 2002 10:01
Location: Russia

Post by vlad12345 »

[quote:4cf4dffed7="Encephalon"]...
In other words, as you suggested, that will be more appropriate to use
"Msxml2.DOMDocument.3.0" than just simply “Msxml2.DOMDocument”?
...
[/quote:4cf4dffed7]

Не совсем так. Полагаю, что ДОПОЛНИТЕЛЬНО стоит делать
проверку и на "Msxml2.DOMDocument.3.0".

Если я правильно понимаю side-by-side mode (могу и ошибаться),
то в этом случае на просто "Msxml2.DOMDocument" откликнется
более ранняя версия, которая не пройдет проверки hasFeature...
В то же время MS XML 3 будет иметься в наличии, только
работать с ним надо будет через "Msxml2.DOMDocument.3.0".

В случае replace mode дополнительная проверка скорее всего
не потребуется, но только мы не можем знать, как именно
юзер установил себе MS XML.
User avatar
Encephalon
Уже с Приветом
Posts: 3181
Joined: 29 Jan 2002 10:01

Post by Encephalon »

[quote:4d924afca7="vlad12345"] .... Если я правильно понимаю side-by-side mode (могу и ошибаться),
то в этом случае на просто "Msxml2.DOMDocument" откликнется
более ранняя версия, которая не пройдет проверки hasFeature...
В то же время MS XML 3 будет иметься в наличии, только
работать с ним надо будет через "Msxml2.DOMDocument.3.0".
....[/quote:4d924afca7]

Вы правы конечно. Я уже сегодня читал документациу на эту тему.
Ладно, придется усложнять проверку. Никуда не деться ...... :roll:

Спасибо Вам !

Return to “Вопросы и новости IT”