0x7F800000: Counter: "Access to restricted URI denied" was tun?

Schönen guten Tag.

Folgende situation: angenommen es gibt eine Seite, wo ein guter Mensch lauter nützliche PDF-Dokumente online stellt, und gerne mitzählen möchte, was wie oft angeclickt wird. Problem: keinerlei unterstützung von serverseitigen scripts, kein Tomcat, absolut nichts in dieser Richtung.

Einen einfachen Counter einzurichten ist ja an sich nichts kompliziertes. Die gibts im www wie sand am meer. Problem: die schicken im wesentlichen ein Bild. Und zählen jedes mal, wie oft das Bild/script angefordert wurde. Ich möchte aber nicht zählen, wie oft das Bild angeguggt wurde, sondern wie oft die PDF's aufgerufen wurden.

Da dachte ich mir zunächst: kein Ding. Hab nen Servlet geschrieben, das unbegrenzt viele einzelne ereignisse von einer Seite mitzählt, in einer ordentlichen XML-Datei abspeichert, und bei bedarf die ganze XML-Tabelle wieder an den client schickt. Auf der client Seite habe ich einen kleinen JavaScript geschrieben, das XMLHttpRequest erstellt, und versucht, eine Anfrage (mit der id des zu zählenden Ereignisses) an diesen Servlet zu schicken, dafür die aktialisierte XML-daten zu bekommen, und im browser für jedes Dokument die richtige Anzahl der Zugriffe hinzuschreiben (sowas könnte man fast "Ajax" schimpfen, wäre es nicht so primitiv).

Problem: Bilder/scripts darf man von externen Servern ja laden (deswegen funktionieren herkömmliche Counter) aber man darf nicht mit diesem XMLHttpRequest verbindung zu einem anderen Server aufbauen:
es erscheint die Exception "Access to restricted URI denied".

Ich könnte mir zwar vorstellen, dass ich jedes mal einen Script von meinem Server lade, der die Angaben im browser updated, und dass ich für jedes dokument eine zwischenseite einbaue, das zB. ein 1x1 px großes Bild lädt, und erst dann den Benutzer zum eigentlichen Dokument weiterleitet. Das wäre aber ein Riesenumweg, und statt dem schönen XML wäre das alles äußerst hässlich.

Gibt es denn eine halbwegs elegante Methode, wie ich denn jetzt solche Clickereignisse Zähle?

Danke für Anregungen.
greetz, 0x7F800000

  1. Hallo,

    also so weit ich weis geht so etwas ni ohne serverseitige unterstützung ...

    MfG. Christoph

    --
    Wo die Sprache aufhört, fängt die Musik an...
    Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
    Go to this
    1. Naja, dass es möglich ist, steht ausser Frage, denn wie gesagt: ich könnte die Kommunikation mit meinem server ausschließlich mithilfe von href-Attributen in <img> und <script> tags bewerkstelligen, so wie es zB http://www.skoom.de/gratis-counter/ gemacht wird. Nur in meinem fall wäre das ja nicht _ein_ Bildchen, sondern _paar_hundert_ Bildchen, und im vergleich mit XML wäre das so "schön" wie die Pest...

      Weitere Vorschläge?

  2. Hallo,

    ich habe dein Szenario noch nicht ganz verstanden. Du hast einen Server mit dem PDFs, auf dem keine serverseitige Dynamik möglich ist. Du hast einen zweiten Server mit serverseitiger Dynamik, dem Counter und der XML-»Datenbank«. Korrekt?

    Gut, dann benutze JSONP zum Abrufen der Daten und new Image() zum Senden eines Klicks an den Counter.

    Ich könnte mir zwar vorstellen, dass ich jedes mal einen Script von meinem Server lade, der die Angaben im browser updated

    Ja, es geht nicht anders.

    und dass ich für jedes dokument eine zwischenseite einbaue, das zB. ein 1x1 px großes Bild lädt

    Eine Zwischenseite ist nicht nötig, du nutzt einfach den click-Event, um einen HTTP-Request über new Image anzustoßen (die Serverantwort ist irrelevant und muss auch kein Bild sein).

    Das wäre aber ein Riesenumweg, und statt dem schönen XML wäre das alles äußerst hässlich.

    XML ist kein tolles Format zur Übertragung und Verarbeitung mittels JavaScript. JSON ist einfacher und es ist gibt es in den meisten Programmierumgebungen vorgefertigte Lösungen, um JSON zu erzeugen.

    Mathias

    1. ich habe dein Szenario noch nicht ganz verstanden. Du hast einen Server mit dem PDFs, auf dem keine serverseitige Dynamik möglich ist. Du hast einen zweiten Server mit serverseitiger Dynamik, dem Counter und der XML-»Datenbank«. Korrekt?

      Jau, das hast du völlig korrekt verstanden.

      das mit new Image() werde ich mir anschauen. Wenn das den einbau von 10000 zwischenseiten mit bildchen erspart, dann bleibt ja alles im Rahmen des erträglichen.

      Was JSON ist weiss ich noch nicht so genau. Gelten für JSON irgendwie andere Sicherheitsbeschränkungen? Werde mir das jedenfalls auch anschauen.

      danke.

      1. Hallo,

        Was JSON ist weiss ich noch nicht so genau. Gelten für JSON irgendwie andere Sicherheitsbeschränkungen? Werde mir das jedenfalls auch anschauen.

        Mit JSON meine ich hier genau das, was du auch angedacht hast: Ein Script vom zweiten Server laden. JSON ist einfach eine Möglichkeit in JavaScript, strukturierte Daten in JavaScript-Syntax unterzubringen. Bei JSONP kombiniert man dieses Format mit dem Aufruf einer Callback-Funktion, die ausgeführt wird, sobald das Script geladen ist. Die Callback-Funktion bekommt dann das JSON-Objekt als Parameter übergeben.

        Mathias

        1. Okay, besten Dank, das mit new Image() war schonmal eine sehr hilfreiche idee, obwohl mir das ehrlichgesagt etwas zweckentfremdet vorkommt :)

          Die daten vom Server zum Client mit JSON zu formatieren hört sich ebenfalls sehr plausibel an, werde ich heute Abend etwas später noch ausprobieren, bin im moment ein wenig in Eile.

          Danke schön!