Avatar billede s0mmer Nybegynder
25. februar 2009 - 15:57 Der er 7 kommentarer

Asp loop midt i javascript

Hej eksperter,

jeg har et forholdsvis stort javascript som bl.a. har dette:
        {
            string: navigator.userAgent,
            subString: "Chrome",
            identity: "Chrome"
        },

og denne klamme gentager sig mange gange.

Jeg har nu valgt at ligge alle oplysninger ind i sql server og vil nu loope alle disse klammer ud. men hvordan ? hvordan laver jeg pludselig asp kode midt i en javascript kode?
Avatar billede fennec Nybegynder
25. februar 2009 - 16:22 #1
Ikke helt sikker på hvad du søger.

ASP kører på serveren inden siden sendes til klienten som så kan afvikle HTML/JS. Så du skal bare opbygge JS koden inde fra ASP også udskrive den:

temp = "{string: navigator.userAgent, "&_
      "subString: ""Chrome"", "&_
      "identity: ""Chrome"" },"

resposne.write temp
Avatar billede s0mmer Nybegynder
25. februar 2009 - 16:26 #2
fennec > så jeg skal oversætte >hele< javascript koden sådan så den kan køres i asp, for at det hele er mulgit?
Avatar billede fennec Nybegynder
25. februar 2009 - 16:38 #3
Nej, det er ikke nødvendigt. Du kan nøjes med de dele der er relevante. JS koden skal bare blive præsis som det ser ud nu.

Det er lidt svært at forklare, hvad jeg mener så jeg giver dig lige et eks:

<%
JSVar = "med dig"
JSFunk = "function test2(){alert(str1+str2)}"
%>

<script>
var str1 = "hej "
var str2 = "<%= JSVar %>"
<%= JSFunk %>
</script>
<input type="button" onClick="test2()">
Avatar billede s0mmer Nybegynder
25. februar 2009 - 16:50 #4
fennec > Er stadigvæk ikke helt med. Se her (bliv ikke skræmt, den er ikke så overskuelig som den ser ud..)


<script type="text/javascript">
var BrowserDetect = {
    init: function () {
        this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
        this.version = this.searchVersion(navigator.userAgent)
            || this.searchVersion(navigator.appVersion)
            || "an unknown version";
        this.OS = this.searchString(this.dataOS) || "an unknown OS";
    },
    searchString: function (data) {
        for (var i=0;i<data.length;i++)    {
            var dataString = data[i].string;
            var dataProp = data[i].prop;
            this.versionSearchString = data[i].versionSearch || data[i].identity;
            if (dataString) {
                if (dataString.indexOf(data[i].subString) != -1)
                    return data[i].identity;
            }
            else if (dataProp)
                return data[i].identity;
        }
    },
    searchVersion: function (dataString) {
        var index = dataString.indexOf(this.versionSearchString);
        if (index == -1) return;
        return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
    },
    dataBrowser: [
temp = "{string: navigator.userAgent, "&_
      "subString: ""Chrome"", "&_
      "identity: ""Chrome"" },"

resposne.write temp
        {     string: navigator.userAgent,
            subString: "OmniWeb",
            versionSearch: "OmniWeb/",
            identity: "OmniWeb"
        },
        {
            string: navigator.vendor,
            subString: "Apple",
            identity: "Safari",
            versionSearch: "Version"
        },
        {
            prop: window.opera,
            identity: "Opera"
        },
        {
            string: navigator.vendor,
            subString: "iCab",
            identity: "iCab"
        },
        {
            string: navigator.vendor,
            subString: "KDE",
            identity: "Konqueror"
        },
        {
            string: navigator.userAgent,
            subString: "Firefox",
            identity: "Firefox"
        },
        {
            string: navigator.vendor,
            subString: "Camino",
            identity: "Camino"
        },
        {        // for newer Netscapes (6+)
            string: navigator.userAgent,
            subString: "Netscape",
            identity: "Netscape"
        },
        {
            string: navigator.userAgent,
            subString: "MSIE",
            identity: "Explorer",
            versionSearch: "MSIE"
        },
        {
            string: navigator.userAgent,
            subString: "Gecko",
            identity: "Mozilla",
            versionSearch: "rv"
        },
        {         // for older Netscapes (4-)
            string: navigator.userAgent,
            subString: "Mozilla",
            identity: "Netscape",
            versionSearch: "Mozilla"
        }
    ],
    dataOS : [
        {
            string: navigator.platform,
            subString: "Win",
            identity: "Windows"
        },
        {
            string: navigator.platform,
            subString: "Mac",
            identity: "Mac"
        },
        {
              string: navigator.userAgent,
              subString: "iPhone",
              identity: "iPhone/iPod"
        },
        {
            string: navigator.platform,
            subString: "Linux",
            identity: "Linux"
        }
    ]

};
BrowserDetect.init();



og af gode grunde ville jeg gerne loope henover alle de klammer istedet for det her. Kan jeg får dig til at skrive en af klammerne med en browser sådan så 1 klamme bliver skrevet ud i asp istedet?
Avatar billede andreas13_fam Nybegynder
25. februar 2009 - 17:22 #5
http://www.quirksmode.org/js/detect.html

Den kode fylder jo ingen ting, 2,5 kb. Nu er jeg PHP programmør, så skal da ikke udtale mig om ASP, men det kan da også blive svært at lave en løkke når der ikke står det samme fx:

          string: navigator.userAgent,
            subString: "Mozilla",
            identity: "Netscape",
            versionSearch: "Mozilla"

og
            string: navigator.userAgent,
            subString: "Firefox",
            identity: "Firefox"

Desuden det som computeren (ikke serveren) skal læse det samme, som hvis der ikke var ASP i, eftersom det bliver afviklet før JavaScriptet når til brugeren.
Men hvis den smule plads betyder noget kan du da prøve at komprimere det fx:
http://www.google.dk/search?hl=da&q=compress+javascript&meta=
Det vil brugeren få mere glæde af.

Og til arkivet så kan man fx kalde det via:
function Browser()
{
    if (BrowserDetect.browser=="Chrome")
    {
    document.getElementById('objekt').style.height = '10px';
        }
}
Avatar billede s0mmer Nybegynder
25. februar 2009 - 23:35 #6
andreas13_fam > Hvorfor link? Det er jo ikke størrelsen der er problemet, men nærmere en optimering jeg ønsker. En dynamisk måde at disse browsere/os bliver skrevet ud. Således jeg nemt kan tilføje disse til databasen i takt med at der kommer flere browsere/opdaterede versioner på markedet.

Derfor har jeg brug for (i >asp<) at disse klammer bliver skrevet som løkker. Med mindre folk har alternativer.
Avatar billede softspot Forsker
26. februar 2009 - 00:35 #7
Hvis tabellen har 3 kolonner, og de kolonner hvor det er relevant er nullable, kan man bare gennemløbe et udtræk af tabellen og generere det scriptkode du efterspørger:

<%
sql = "SELECT * FROM dataBrowser"
set rs = conn.execute(sql)
do while not rs.eof
  response.write "{"
  response.write "string: navigator.userAgent"
  if not isnull(rs("substring")) then
    response.write ",subString:""" & rs("substring") & """"
  end if
  if not isnull(rs("versionsearch")) then
    response.write ",versionSearch:""" & rs("versionsearch") & """"
  end if
  if not isnull(rs("identity")) then
    response.write ",identity:""" & rs("identity") & """"
  end if
  response.write "}"

  rs.movenext

  ' hvis der er flere rækker, så udskriv komma
  if not rs.eof then
    response.write ","
  end if
loop
rs.close
set rs = nothing
conn.close
set conn = nothing
%>


Koden skal indsættes umiddelbart efter

dataBrowser:[

og naturligvis erstatte hele blokken af "browserdata-klammer" ned til


],
dataOS...


Den genererede JS vil i øvrigt være pakket, som andreas13_fam er inde på - så det er en Win/Win ;-)
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