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?
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
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?
25. februar 2009 - 17:22
#5
http://www.quirksmode.org/js/detect.htmlDen 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';
}
}
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 ;-)