smallfish: Opera Problem

Folgender Code funktioniert in IE und FF, aber nicht in Opera:

<script type="text/javascript">  
var twice = document.referrer.search(/?cmpid=meinedomain/);  
	if (twice == -1) {  
    window.opener.location.href=document.referrer + "?cmpid=meinedomain";  
    }  
  
function byby() {  
	window.open('','_self');  
	window.close();  
	}  
  
document.onclick=byby  
</script>

Der Code steht in einer Seite, die von einer Kundenseite (auf die ich keinen Zugriff habe) per href _blank geöffnet wurde. Ziel ist es,

  • die URL der Parent Seite (document.referrer) mit einem Tracking Parameter zu erweitern und im Parent Fenster neu zu laden.
  • das Fenster bei Klick irgendwo im Dokument zu schliessen.
  • die "twice" Abfrage hat den Zweck, bei wiederholten Klick auf den Link nicht eine Kette von gleichen Parametern zu erzeugen.

Wie gesagt: Keine Probleme in IE und FF, aber in Opera (9.x) tut sich nichts. Hat jemand eine Idee, warum?

  1. Grüße,
    ich hätte angst in die fehlerkonsole zu schauen - mach doch dragonfly auf und schau was es sagt ;)
    MFG
    bleicher

  2. Wie gesagt: Keine Probleme in IE und FF, aber in Opera (9.x) tut sich nichts. Hat jemand eine Idee, warum?

    auch Opera hat eine Fehlerkonsole, sie ist aber etwas versteckter, als im Firefox (da ich gerade keinen zur Hand habe, kann ich dir aber auch nicht sagen wo du sie genau findest), sollte dir aber bei deinem Problem weiterhelfen.

    Struppi.

    1. Grüße

      auch Opera hat eine Fehlerkonsole, sie ist aber etwas versteckter,

      tools->advanced->error console
      MFG
      bleicher

  3. Vielen Dank für die Hinweise, hier ist die Meldung von Dragonfly:

    Error:
    name: TypeError
    message: Statement on line 4: Cannot convert undefined or null to Object
    Backtrace:
      Line 4 of inline#1 script in http://xxxx.html
            window.opener.location.href=document.referrer + "?cmpid=meinedomain";

    stacktrace: n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'

    Was meint er jetzt damit? Was ist undefined or null?

    1. Line 4 of inline#1 script in http://xxxx.html
              window.opener.location.href=document.referrer + "?cmpid=meinedomain";
      Was ist undefined or null?

      window.opener oder
      window.opener.location oder
      window.opener.location.href oder
      document.referrer

      Es liegt an dir, mit Debug-Ausgaben herauszufinden, welches undefined ergibt (ich vermute window.opener - vielleicht wegen einer Same-Origin-Policy).

      Mathias

      1. »»   Line 4 of inline#1 script in http://xxxx.html
        »»         window.opener.location.href=document.referrer + "?cmpid=meinedomain";
        »» Was ist undefined or null?

        window.opener oder
        window.opener.location oder
        window.opener.location.href oder
        document.referrer

        Es liegt an dir, mit Debug-Ausgaben herauszufinden, welches undefined ergibt (ich vermute window.opener - vielleicht wegen einer Same-Origin-Policy).

        Mathias

        Offensichtlich funktioniert window.opener.location.href= zwischen verschiedenen Domains nicht. Aber warum nur in Opera? Und gibt es einen Workaround?

        1. Offensichtlich funktioniert window.opener.location.href= zwischen verschiedenen Domains nicht. Aber warum nur in Opera? Und gibt es einen Workaround?

          Tja, gute Frage. Ehrlich gesagt wundere ich mich darüber, dass die restlichen Browser hier keine Verletzung der Same-Origin-Policy sehen - denn es ist meinem Verständnis nach eine. Bei Frames kenne ich ebenfalls dieses Verhalten, da kann man m.W. auch nicht die URI des Framesets bzw. des Dokuments lesen, dass das gegenwärtige Dokument cross-domain einbindet.
          Ich werde der Sache in den nächsten Tagen mal näher auf den Grund gehen, diese Uneinheitlichkeit verstehe ich selbst nicht und interessiert mich sehr.
          Vielleicht hat solange jemand anderes eine Idee? (Habe mal den Titel angepasst, um Aufmerksamkeit zu lenken. ;-))

          Mathias

          1. Hi,

            Offensichtlich funktioniert window.opener.location.href= zwischen verschiedenen Domains nicht. Aber warum nur in Opera? Und gibt es einen Workaround?

            Tja, gute Frage. Ehrlich gesagt wundere ich mich darüber, dass die restlichen Browser hier keine Verletzung der Same-Origin-Policy sehen - denn es ist meinem Verständnis nach eine. Bei Frames kenne ich ebenfalls dieses Verhalten, da kann man m.W. auch nicht die URI des Framesets bzw. des Dokuments lesen, dass das gegenwärtige Dokument cross-domain einbindet.

            Den aktuellen Inhalt Auslesen ist was anderes, als eine neue Location zuweisen (und letzteres ist hier ja der konkrete Fall, bei dem der Fehler auftritt) - das Auslesen könnte meine Privatsphäre betreffen; aber wenn du mich durch Zuweisung eines neuen Wertes in die Wüste oder sonstwohin schickst, ist das zumindest hinsichtlich meiner Daten kein Problem.
            Möglich, dass die anderen Browser hier feiner differenzieren, und den Wechsel auf eine neue Adresse als unproblematisch durchgehen lassen.

            MfG ChrisB

            --
            Light travels faster than sound - that's why most people appear bright until you hear them speak.
            1. Den aktuellen Inhalt Auslesen ist was anderes, als eine neue Location zuweisen (und letzteres ist hier ja der konkrete Fall, bei dem der Fehler auftritt) - das Auslesen könnte meine Privatsphäre betreffen

              Ja, stimmt, danke für den Hinweis. Sonst würde es z.B. nicht möglich sein, aus einem Frameset auszubrechen. Auch da hat Opera schon immer gezickt und eine sehr harsche SOP angewendet. Deshalb waren solche Hacks nötig:
              http://de.selfhtml.org/javascript/beispiele/seitenanzeige.htm
              Vielleicht ist etwas ähnliches bei Popups möglich (hmm, gibts target="_opener" ? Wenn nicht, könnte man dem Ausgangsfenster vielleicht einfach einen Namen zuweisen).

              Mathias