Kai345: +selfhtml-forum: Opera 11 und getComputedStyle bzw. Alternativen

[latex]Mae  govannen![/latex]

Ich muß erst einmal ein wenig ausholen...

Seit ich das SelfHTML-Forum auf Opera 11.50 statt 10 lese, habe ich ein Problem mit meinem Foren-Javascript.
Und zwar habe ich eine Funktion, die die ungelesenen Nachrichten zählt. Dazu ermittele ich die Links, die nicht mit der Klasse "visited" ausgestattet sind. Allerdings tritt der Fall auf, daß eine Nachricht im Browser bereits als "Gelesen" markiert ist, aber vom SelfHTML-Server noch nicht die Klasse 'visited" erhalten hat. Die Anzahl dieser Nachrichten muß ich dann natürlich subtrahieren.

Bisher habe ich das mit folgendem, von molilys Foren-Script gekl... inspirierter Lösung als Callback-Funktion für filter() erschlagen:

/**  
* Testet, ob der outline-style des Elements den Wert "solid" hat (Link ist nicht besucht), bei besuchten Links  
* ist der Wert "none".  
* siehe http://forum.de.selfhtml.org/js/forum.js  
*/  
function not_visited(el) {  
    /* Link hat keine visited-Klasse, ist aber in der Browser-History als besucht markiert */  
    return window.getComputedStyle(el, null).outlineStyle === "solid";  
}

Hat auch immer funktioniert.
Seit Opera 11 liefert diese Funktion grundsätzlich false zurück. Debugging ergab:
window.getComputedStyle(el, null).outlineStyle liefert immer undefined, somit ist der Vergleich immer false.

Da Opera 10 dieses Verhalten nicht hat, genausowenig wie Chrome, habe ich mir das von getComputedStyle() erzeugte Objekt per Schleife als Zeichenkette der Eigenschaften zusammensetzen und ausgeben lassen. Als Ergebnis erhalte ich nur

cssText:
length: 0
parentRule: null
getPropertyPriority: function() { return ""; }
getPropertyValue: function() { return ""; }
getPropertyCSSValue: function() { return null; }

statt - wie bisher bei Opera10 und jetzt noch bei Chrome - eine Auflistung aller CSS-Eigenschaften und -Werte.

Soweit die Vorgeschichte.

Nun suche ich einen anderen Weg, entweder den gewünschten Wert von outline-style zu ermitteln _ODER_ eine ganz andere Methode, die in der Browser-History als gelesen markierten Links zu ermitteln.

Wäre es nur eine Anzeige, würde es nicht viel ausmachen, allerdings verwende ich das Ergebnis (aka Anzahl ungelesener Nachrichten) für meine Foren-Klick-Navigation, und da ist es schon lästig, wenn gelesene Nachrichten erneut vorgelegt werden.

Stur lächeln und winken, Männer!
Kai

--
Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
in Richtung "Mess up the Web".(suit)
SelfHTML-Forum-Stylesheet
  1. Om nah hoo pez nyeetz, Kai345!

    könnte dies ein Fall von history-stealing-Gegenmaßnahmen sein?

    Matthias

    --
    1/z ist kein Blatt Papier. http://www.billiger-im-urlaub.de/kreis_sw.gif
    1. [latex]Mae  govannen![/latex]

      könnte dies ein Fall von history-stealing-Gegenmaßnahmen sein?

      Ich hab es gerade mal mit einem anderen (oder auch: Nicht-Beasucht-Link) Element versucht, da kommt die Liste der Eigenschaften wie gehabt. Also scheint es so zu sein :(

      Was für ein Unsinn! Weshalb wird das _Auslesen_ der Werte verhindert? Wenn man das _Schreiben_ blockieren würde, wäre es noch verständlich.

      <schimanski />

      Stur lächeln und winken, Männer!
      Kai

      --
      Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
      in Richtung "Mess up the Web".(suit)
      SelfHTML-Forum-Stylesheet
      1. Hi,

        Was für ein Unsinn! Weshalb wird das _Auslesen_ der Werte verhindert?

        Deswegen: http://www.heise.de/security/meldung/History-Stealing-2-0-Ich-weiss-wo-du-wohnst-1005016.html

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  2. Hi,

    Nun suche ich einen anderen Weg, entweder den gewünschten Wert von outline-style zu ermitteln

    Wie gesagt: Das unterbinden die Browser absichtlich. It's a feature!

    _ODER_ eine ganz andere Methode, die in der Browser-History als gelesen markierten Links zu ermitteln.

    Das wird nicht möglich sein, es sei denn, du findest eine neue Sicherheitslücke.

    Es dürfte hingegen sehr einfach sein, eine eigene History mit gelesenen Beiträgen anzulegen - schließlich wird dein JavaScript auf jeder Seite des Forums geladen – und diese an der fraglichen Stelle abzufragen.

    Mathias