Change #11

JavaScript-Problem in map2.tpl

Von following vor mehr als 4 Jahren hinzugefügt. Vor etwa 2 Jahren aktualisiert.

Status:erledigt% erledigt:

100%

Priorität:2 mittel
Zugewiesen an:following
Zielversion:Version 14
Ticket Referenz: Kategorien:karte

Beschreibung

Mehrere mobile Browser scheinen Probleme mit den folgenden beiden Codezeilen in map2.tpl zu haben:

sHtml += "<tr><td><img src='resource2/ocstyle/images/cacheicon/20x20-" + nTypeId + ".png' alt='" + xmlentities(sTypeText) + "' title='" + xmlentities(sTypeText) + "' height='20px' width='20px'/></td><td style='min-width:150px";
sHtml += "<tr><td colspan='2' style='vertical-align:top;'>{t escape=js}by{/t} <a href='viewprofile.php?userid=" + encodeURI(nUserId) + "' target='_blank'>" + xmlentities(sUsername) + "</a></td><td align='right'><a class='nooutline' href='articles.php?page=cacheinfo#difficulty' target='_blank'><img src='resource2/{$opt.template.style}/images/difficulty/diff-" + String(nDifficulty*10) + ".gif' border='0' width='19' height='16' hspace='2' onmouseover='Tip(\"{t}Difficulty{/t}: " + String(nDifficulty) + " {t}of{/t} 5\", DELAY, 0, FADEIN, false, FADEOUT, false, BGCOLOR, \"#fffedf\", BORDERCOLOR, \"grey\")' onmouseout='UnTip()' /><img src='resource2/{$opt.template.style}/images/difficulty/terr-" + String(nTerrain*10) + ".gif' border='0' width='19' height='16' hspace='2' onmouseover='Tip(\"{t}Terrain{/t}: " + String(nTerrain) + " {t}of{/t} 5\", DELAY, 0, FADEIN, false, FADEOUT, false, BGCOLOR, \"#fffedf\", BORDERCOLOR, \"grey\")' onmouseout='UnTip()' /></a></td></tr>";

Das äußert sich dann darin, dass Bild-URLs nicht stimmen und z.B. Folgendes versucht wird, vom Webserver abzurufen:

resource2/ocstyle/images/cacheicon/20x20-" + nTypeId + ".png
resource2/ocstyle/images/difficulty/terr-%22%20+%20String(nTerrain*10)%20+%20%22.gif

Bug im OC-JavaScript-Code, oder im Browser?

Zugehörige Revisionen

Revision 6d8c528e
Von following vor mehr als 2 Jahren hinzugefügt

added workaround for JavaScript parsing errors; updates #11

Revision 1a728245
Von following vor mehr als 2 Jahren hinzugefügt

Revert "added workaround for JavaScript parsing errors; updates #11"

does not solve the problem

Revision ebcdfaba
Von following vor mehr als 2 Jahren hinzugefügt

added another workaround for JavaScript parsing errors; updates #11

Historie

#1 Von following vor mehr als 4 Jahren aktualisiert

  • Tracker wurde von Change zu Bug geändert

#2 Von following vor mehr als 4 Jahren aktualisiert

  • Kategorien wurde auf karte gesetzt

#3 Von cmanie vor mehr als 4 Jahren aktualisiert

Ist ein Browsertyp bekannt, bei dem das reproduzierbar ist?

#4 Von bohrsty vor mehr als 4 Jahren aktualisiert

ich weiss nicht all zu viel ueber javascript, aber anfuehrungszeichen (") und hochkommata (') werden da sehr komisch behandelt...

ich weiss nicht wie es korrekt waere (also nach javascript-standard), aber der browser bei dem der fehler auftritt interpretiert offenbar die inneren hochkommata als "feste" kapselung und ignoriert die anfuehrungszeichen...
sHtml += "<tr><td><img src='resource2/ocstyle/images/cacheicon/20x20-" + nTypeId + ".png' alt='" + xmlentitie...

vielleicht kommt man hier mit escapement weiter, falls javascript das vorsieht...

#5 Von cmanie vor mehr als 4 Jahren aktualisiert

bohrsty schrieb:

ich weiss nicht all zu viel ueber javascript, aber anfuehrungszeichen (") und hochkommata (') werden da sehr komisch behandelt...

Eigentlich nicht. Laut ECMA-Script-Standards ist beides erlaubt:

A string literal is zero or more characters enclosed in single or double quotes.

Bezüglich der enthaltenen Zeichen gibt es nur wenige Einschränkungen (anders beispielsweise als in PHP):
  • in doublequoted Strings sind keine Doubleqoutes erlaubt (logisch)
  • in singlequoted Strings sind keine Singlequotes erlaubt (auch logisch)
  • in beiden sind die Einzelzeichen \ und Linebreaks (nicht zu verwechseln mit dem escaped Linebreak \n) nicht erlaubt
    Die Frage wird letztendlich sein: Wer war zuerst da.

vielleicht kommt man hier mit escapement weiter, falls javascript das vorsieht...

Das wäre wohl eine Möglichkeit.
Da es aber in den meisten Browsern funktioniert tippe ich auf ein browserspezifisches Problem.
Daher wäre es interessant zu wissen, in welchem Browser man das reproduzieren kann. Irgendjemand muss das doch herausgefunden bzw. gemeldet haben.

#6 Von following vor mehr als 4 Jahren aktualisiert

Die Meldung stammt von mir; ist mir beim Auswerten von Apache-Logfiles aufgefallen.

Hier ein paar Browser, bei denen es in den letzten Tagen aufgetreten ist:

  • Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E)
  • Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
  • Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 Firefox/18.0
  • Mozilla/5.0 (iPod; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B144 Safari/8536.25
  • Mozilla/5.0 (Linux; U; Android 4.1.2; de-de; A511 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30
  • Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.2.15) Gecko/20110303 Ubuntu/10.04 (lucid) Firefox/3.6.15

Also nicht nur mobile Browser wie oben vermutet sondern querbeet.

#7 Von following vor mehr als 2 Jahren aktualisiert

  • Status wurde von offen zu in Arbeit geändert
  • Zugewiesen an wurde auf following gesetzt
  • Zielversion wurde auf Version 14 gesetzt

#8 Von following vor mehr als 2 Jahren aktualisiert

Ich versuch's mal mit Escaping wie von bohrsty vorgeschlagen.

#9 Von following vor mehr als 2 Jahren aktualisiert

  • Status wurde von in Arbeit zu im Test geändert
  • % erledigt wurde von 0 zu 90 geändert

#10 Von following vor mehr als 2 Jahren aktualisiert

following schrieb:

Ich versuch's mal mit Escaping wie von bohrsty vorgeschlagen.

Hat nicht funktioniert. Nächster Versuch: "'" ersetzt durch eine Variable mit dem Inhalt "'".

#11 Von following vor mehr als 2 Jahren aktualisiert

  • Status wurde von im Test zu erledigt geändert
  • % erledigt wurde von 90 zu 100 geändert

Womöglich hat das Escaping doch funktioniert: Vorher trat das Problem mehrmals täglich auf, danach nur noch bei einem einzigen Benutzer an einem Tag. Das könnte alter JavaScript-Code aus einem Browsercache gewesen sein.

Jedenfalls ist nun Ruhe, Problem gelöst.

#12 Von following vor etwa 2 Jahren aktualisiert

  • Tracker wurde von Bug zu Change geändert

War kein OC-Bug. Workaround für Browser-Bug implementiert.

Auch abrufbar als: Atom PDF