Avatar billede moso Nybegynder
27. februar 2003 - 23:41 Der er 20 kommentarer og
1 løsning

Hvordan checker jeg om browser er IE til Mac?

Jeg har brug for at checke om browser er en Internet Explorer Mac version.
Jeg har dette script som checker version, men ikke styresystem.
Hvordan fikser man det?:

<%
If InStr(Request.ServerVariables("HTTP_USER_AGENT"), "MSIE") >= 5 Then %>
<!--#include virtual="/2003/include/navi.asp" -->
<% End If %><br>
<% If InStr(Request.ServerVariables("HTTP_USER_AGENT"), "MSIE") < 5  Then  %>
<!--#include virtual="/2003/include/navi_2.asp" -->
<% End If %>

Jeg skal include den sidste fil hvis der er tale om en mac.
Avatar billede hossein Nybegynder
28. februar 2003 - 01:13 #1
Sådan kan det gøres:

<%
Dim strAgent, blnWin, blnMac, blnLinux, strOStype
Dim blnNS, blnIE, strBrowserType, blnWebTV, blnOpera, blnLynx, blnGecko

strAgent = Request.ServerVariables("HTTP_USER_AGENT")

blnIE = (instr(strAgent,"IE")) > 0
if (blnIE) then
  blnWebTV = (instr(strAgent,"WebTV")) > 0
  blnOpera = (instr(strAgent,"Opera")) > 0
else
  blnGecko = (instr(strAgent,"Gecko")) > 0
  blnLynx = (instr(strAgent,"Lynx")) > 0
  blnNS = not (blnLynx and blnGecko)
end if

if (blnIE and blnOpera) then
strBrowserType = "Opera"
elseif (blnLynx) then
strBrowserType = "Lynx"
elseif (blnIE and blnWebTV) then
strBrowserType = "WebTV"
elseif (blnGecko) then
strBrowserType = "Mozilla/Gecko"
elseif (blnNS) then
strBrowserType = "Netscape"
else
strBrowserType = "Internet Explorer"
end if

blnWin = (instr(strAgent,"Win")) > 0
blnMac = (instr(strAgent,"Mac")) > 0
blnNix = (instr(strAgent,"Linux")) > 0
if (blnWin) then
strOStype = "Windows"
call Win()
elseif (blnMac) then
strOStype = "Macintosh"
call Mac()
elseif (blnLinux) then
strOStype = "Linux"
call Linux()
else
strOStype = "Unknown OS"
call Mac()
end if
%>

<% sub Win() %>
<link rel="stylesheet" href="win.css" type="text/css">
</head>
<html>
  <body alink="#800000" link="#000080" vlink="#800080" text="#000000" bgcolor="#000000">
  <table width="75%" border="0" cellspacing="0" cellpadding="10" bgcolor="#9999FF" align="center">
  <tr><td colspan="2" align="center">
  <img src="win.gif" alt="Borg of MS">
  </td></tr>
<% end sub %>

<% sub Mac() %>
<link rel="stylesheet" href="mac.css" type="text/css">
</head>
<html>
  <body alink="#800000" link="#000080" vlink="#800080" text="#000000" bgcolor="#f5f5f5">
  <table width="75%" border="0" cellspacing="0" cellpadding="10" bgcolor="#9966FF" align="center"> 
  <tr><td colspan="2" align="center">
  <img src="mac.gif" alt="Apple!">
  </td></tr>
<% end sub %>

<% sub Linux() %>
<link rel="stylesheet" href="mac.css" type="text/css">
</head>
<html>
  <body alink="#800000" link="#000080" vlink="#800080" text="#000000" bgcolor="#ccffff">
  <table width="75%" border="0" cellspacing="0" cellpadding="10" bgcolor="#cc00cc" align="center">
  <tr><td colspan="2" align="center">
  <img src="Linux.gif" alt="Linux!">
  </td></tr>
<% end sub %>

<H1> Hello <%= strOStype %> Hej! Du bruger <%= strBrowserType %>!  </H1>
Avatar billede mortrr Praktikant
28. februar 2003 - 01:19 #2
<%
If InStr(Request.ServerVariables("HTTP_USER_AGENT"), "MSIE") >= 5 Then
  If InStr(Request.ServerVariables("HTTP_USER_AGENT"), "PowerPC")>0  Then  ' Mac
    %><!--#include virtual="/2003/include/navi_2.asp" --><%
  Else ' PC
    %><!--#include virtual="/2003/include/navi.asp" --><%
  End If
End If
%>

- Morten
Avatar billede moso Nybegynder
01. marts 2003 - 17:34 #3
mortrr >>
Det ser rigtigt ud, men desværre er det ikke nok.
Jeg har brug for at denne funktion også virker:
<%
If InStr(Request.ServerVariables("HTTP_USER_AGENT"), "MSIE") >= 5 Then %>
><!--#include virtual="/2003/include/navi.asp" --><% End If %><br>

<% If InStr(Request.ServerVariables("HTTP_USER_AGENT"), "MSIE") < 5 Then  %>
><!--#include virtual="/2003/include/navi_2.asp" -->
<% End If %>

Altså:
Hvis browser er IE PC 5+ skal den include navi.asp
Ellers :include navi_2.asp.

Kan det se ud som det her:
  <%
If InStr(Request.ServerVariables("HTTP_USER_AGENT"), "MSIE") >= 5 Then %>
<!--#include virtual="/2003/include/navi.asp" -->
<%Else ' PC
    %><!--#include virtual="/2003/include/navi_2.asp" --><%
  End If
%>
Jeg kan ikke checke det i mac, derfor spørger jeg...
Avatar billede mortrr Praktikant
01. marts 2003 - 18:14 #4
Den kontrol du laver tester ikke om versionen er >=5, men om der står MSIE i strengen, på position 5 eller større, så jeg gik ud fra at du kun ville teste på om det var IE.

Hvis du også vil have versionen med, kan man kigge på tegnet efter MSIE.
User Agent vil som regel for MSIE stå som fx "MSIE 5" (det er nu langfra sikkert, da man kan skrive hvad som helst i "sin" useragent, men så er det jo ens egen skyld).

Så kig efter om det er IE og version, med fx:
isIE=false
userAgent=cStr(Request.ServerVariables("HTTP_USER_AGENT"))
MajorVersion=0
if inStr(userAgent,"MSIE")>0 then
  isIE=true
  if isNumeric(mid(userAgent,instr(userAgent,"MSIE")+5,1) then
    MajorVersion=cInt(mid(userAgent,instr(userAgent,"MSIE")+5,1))
  end if
end if

Herefter kan du kigge på om det er en Mac:
if instr(userAgent,"PowerPC")>0 then
  isMac=true
else
  if instr(userAgent,"Macintosh")>0 then
    isMac=true
  end if
end if

Så kan du sende de sider du har brug for.

<%
If isMSIE AND majorVersion >= 5 Then  ' PC version >=5
  %><!--#include virtual="/2003/include/navi.asp" --><%
Else
    %><!--#include virtual="/2003/include/navi_2.asp" --><%
  End If
%>

Hvis du også vil have en kontrol for om det er en Mac, kan du udvide den.

- Morten
Avatar billede moso Nybegynder
01. marts 2003 - 18:19 #5
Super, men kan du hjælpe mig med at udvide den til også at indeholde en kontrol for mac, så fordobler jeg gerne points
Avatar billede mortrr Praktikant
01. marts 2003 - 18:25 #6
Den skulle vise navi.asp hvis det er PC og >=5 men ikke hvis det er en Mac ?
<%
If isMSIE AND majorVersion >= 5 AND NOT isMac Then  ' PC version >=5
  %><!--#include virtual="/2003/include/navi.asp" --><%
Else
    %><!--#include virtual="/2003/include/navi_2.asp" --><%
End If
%>

- Morten
Avatar billede moso Nybegynder
01. marts 2003 - 18:25 #7
OK timeout. Jeg ved ikke helt hvor dette ender efterhånden, så inden du går helt amok så check det her:
Der er to includefiler.
includefil 1 skal vises hvis IE 5+ Windows.
Ved ALLE andre skal  includefil 2 vises...

Er det også sådan du har forstået spørgsmålet?
Avatar billede moso Nybegynder
01. marts 2003 - 18:27 #8
Jeg ved godt at spørgsmålet nu er kommet en del videre, men jeg lærer jo efterhånden:-)
Avatar billede mortrr Praktikant
01. marts 2003 - 18:29 #9
Ja - det er sådan jeg har forstået den. (eller rettere det var sådan jeg endelig forstod den da jeg skrev den sidste kode)

- Morten
Avatar billede moso Nybegynder
01. marts 2003 - 18:34 #10
Så ser det således ud?
Den giver fejl i linie 6:
Microsoft VBScript compilation error '800a03ee'

Expected ')'

/2003/include/include_navi.asp, line 6

if isNumeric(mid(userAgent,instr(userAgent,"MSIE")+5,1) then
--------------------------------------------------------^


<% isIE=false
userAgent=cStr(Request.ServerVariables("HTTP_USER_AGENT"))
MajorVersion=0
if inStr(userAgent,"MSIE")>0 then
  isIE=true
  if isNumeric(mid(userAgent,instr(userAgent,"MSIE")+5,1) then
    MajorVersion=cInt(mid(userAgent,instr(userAgent,"MSIE")+5,1))
  end if
end if

Herefter kan du kigge på om det er en Mac:
if instr(userAgent,"PowerPC")>0 then
  isMac=true
else
  if instr(userAgent,"Macintosh")>0 then
    isMac=true
  end if
end if %>
<%
If isMSIE AND majorVersion >= 5 AND NOT isMac Then  ' PC version >=5
  %><!--#include virtual="/2003/include/navi.asp" --><%
Else
    %><!--#include virtual="/2003/include/navi_2.asp" --><%
End If
%>
Avatar billede moso Nybegynder
01. marts 2003 - 18:35 #11
fandt en fejl i parantes og rettede, men nu kommer denne fejl:
Microsoft VBScript runtime error '800a000d'

Type mismatch: '[string: "MSIE 6.0; Windows NT"]'

/2003/include/include_navi.asp, line 6
Avatar billede mortrr Praktikant
01. marts 2003 - 18:39 #12
Parantesen skal være til sidst.
  if isNumeric(mid(userAgent,instr(userAgent,"MSIE")+5,1)) then

Sorry

- Morten
Avatar billede moso Nybegynder
01. marts 2003 - 19:08 #13
Så er der ingen fejl i koden, men den fanger kun navi_2.asp.
Dvs. at den ikke fanger at jeg bruger en IE 6
Avatar billede mortrr Praktikant
01. marts 2003 - 19:14 #14
Arh Morten altså.
Den hed jo isIE, og ikke isMSIE:
If isIE AND majorVersion >= 5 AND NOT isMac Then  ' PC version >=5

Der kan siges meget godt om Option Explicit.

- Morten
Avatar billede moso Nybegynder
01. marts 2003 - 19:21 #15
SUPER. Det ser ud til at virke.
Jeg har dog ikke kune teste det på mac som sagt.
Når jeg derimod tester den i Opera, så viser den include navi.asp, skulle det ikke være navi_2.asp da det jo ikke er IE??
Er det fordi vi checker på versionsnummer > end 5?
Opera er vers. 7.0
Avatar billede mortrr Praktikant
01. marts 2003 - 19:32 #16
Nej - det er fordi den lader som om den er IE.
Jeg har tilføjet et par linier som kontrollerer for Opera, og nulstiller isIE til false.

isIE=false
isOpera=false
userAgent=cStr(Request.ServerVariables("HTTP_USER_AGENT"))
MajorVersion=0

if inStr(userAgent,"MSIE")>0 then
  isIE=true
  if isNumeric(mid(userAgent,instr(userAgent,"MSIE")+5,1)) then
    MajorVersion=cInt(mid(userAgent,instr(userAgent,"MSIE")+5,1))
  end if
end if

if inStr(userAgent,"Opera")>0 then
  isOpera=true
  isIE=false
  if isNumeric(mid(userAgent,instr(userAgent,"Opera")+6,1)) then
    MajorVersion=cInt(mid(userAgent,instr(userAgent,"Opera")+6,1))
  end if
end if
if instr(userAgent,"PowerPC")>0 then
  isMac=true
else
  if instr(userAgent,"Macintosh")>0 then
    isMac=true
  end if
end if

If isIE AND majorVersion >= 5 AND Not isMac Then
  %><!--#include virtual="/2003/include/navi.asp" --><%
Else
    %><!--#include virtual="/2003/include/navi_2.asp" --><%
End If

Det kunne være man skulle få skrevet en fult useragent parser.

- Morten
Avatar billede moso Nybegynder
01. marts 2003 - 19:39 #17
Vil det sige at man derefter er nødt til at tilføje en blok for hver enkelt browser man vil checke?
Avatar billede moso Nybegynder
01. marts 2003 - 19:41 #18
Stopper for i dag, vel fortsætter imorgen aften... Venter dog på dig svar. Point til dig, men hvordan fordobler jeg når jeg allede har givet max?
Avatar billede moso Nybegynder
01. marts 2003 - 19:41 #19
Venter dog på dig svar = Venter dog på dit svar
Avatar billede mortrr Praktikant
01. marts 2003 - 19:44 #20
Nej. Det er heldigvis kun Opera der er dum nok til at lade som om den er en anden browser.

Men hvis du aktivt vil kunne genkende andre browsere, fx Mozilla 6 eller Netscape 4 eller ... så skal du igang med en større operation.

Og du skal ikke doble noget.

- Morten
Avatar billede moso Nybegynder
01. marts 2003 - 19:50 #21
takker en milliard million gange...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester