problem mit window.open in firefox
dingsbums
- javascript
Hallo,
ich hab da ein problem mit meinem javascript-bookmarklet in firefox.
javascript:window.open("http://www.example.com","test");void(0);
dadurch öffnet sich ja ein neues fenster mit der url "http://www.example.com" und dem namen "test". soweit so gut. mein problem ist aber folgendes. wenn ich das bookmarklet erneut ausführe von einer anderen seite aus dann öffnet sich wieder ein neues fenster statt das das ursprüngliche fenster mit dem namen "test" aktualisiert wird. laut meiner google-recherche sollte es aber eigentlich die url in dem bereits existierenden fenster öffnen.
so wie z.b. hier beschrieben:
https://developer.mozilla.org/en-US/docs/Web/API/Window.open
If a window with the name strWindowName already exists, then strUrl is loaded into the existing window. In this case the return value of the method is the existing window and strWindowFeatures is ignored. Providing an empty string for strUrl is a way to get a reference to an open window by its name without changing the window's location. To open a new window on every call of window.open(), use the special value _blank for strWindowName.
oder hier:
http://aktuell.de.selfhtml.org/artikel/javascript/fensterzugriff/
Der Browser verwaltet intern die Liste der Fensternamen. Wenn Sie ein neues Fenster öffnen wollen, dessen Fenstername schon existiert, wird einfach das alte Fenster weiterverwendet. Denken Sie sich also einen Fensternamen aus, der nicht von anderen Websites benutzt wird, die zur gleichen Zeit gleichnamige Popupfenster geöffnet haben könnten
in opera funktioniert das genau so wie in den links beschrieben. in firefox leider nicht und wie ich grad festgestellt habe macht auch chrome die selben probleme wie firefox.
verhällt sich hier nun opera falsch oder firefox und chrome?
lg
dingsbums
falls das wichtig ist hier mal die browser-versionen, die ich nutze:
chrome: Version 31.0.1650.63 m
firefox: 26.0
opera: 12.16
Hi,
ich hab da ein problem mit meinem javascript-bookmarklet in firefox.
javascript:window.open("http://www.example.com","test");void(0);
dadurch öffnet sich ja ein neues fenster mit der url "http://www.example.com" und dem namen "test".
ich kenne es eher so, dass dann der Popup-Blocker anspringt: "Firefox prevented this site from opening a popup."
mein problem ist aber folgendes. wenn ich das bookmarklet erneut ausführe von einer anderen seite aus dann öffnet sich wieder ein neues fenster statt das das ursprüngliche fenster mit dem namen "test" aktualisiert wird. laut meiner google-recherche sollte es aber eigentlich die url in dem bereits existierenden fenster öffnen.
Ja, eigentlich schon. Allerdings wird Javascript schön sauber domainweise voneinander abgeschirmt. Dein ursprüngliches Bookmarklet läuft im Kontext der Domain A, für die es geöffnet wurde. Wird einen Moment später dasselbe Bookmarklet im Kontext der Domain B aufgerufen, "weiß" es nichts von anderen Fenstern, die für andere Domains geöffnet wurden.
in opera funktioniert das genau so wie in den links beschrieben. in firefox leider nicht und wie ich grad festgestellt habe macht auch chrome die selben probleme wie firefox.
verhällt sich hier nun opera falsch oder firefox und chrome?
IMO ist das Interpretationssache. Ich würde hier dazu tendieren, mit Opera zu schimpfen.
Ciao,
Martin
ich kenne es eher so, dass dann der Popup-Blocker anspringt: "Firefox prevented this site from opening a popup."
den hab ich wohl abgestellt :D
Ja, eigentlich schon. Allerdings wird Javascript schön sauber domainweise voneinander abgeschirmt. Dein ursprüngliches Bookmarklet läuft im Kontext der Domain A, für die es geöffnet wurde. Wird einen Moment später dasselbe Bookmarklet im Kontext der Domain B aufgerufen, "weiß" es nichts von anderen Fenstern, die für andere Domains geöffnet wurden.
also müsste man wohl die doku von selfhtml und mozilla.developer ändern dass es heißt:
wenn schon ein fenster mit dem namen "test" existiert, welches von der selben domain ist, von der aus das script aggiert, dann wird mit window.open("url","test") die url im bereits existierenden fenster geöffnet.
im moment impliziert ja gerade die doku von selfhtml das von mir erwartete verhalten, da dort ja extra von fensternamen von anderen websiten die rede ist.
IMO ist das Interpretationssache. Ich würde hier dazu tendieren, mit Opera zu schimpfen.
da das verhalten von opera eben genau so von mir gewünscht ist schimpfe ich lieber mit firefox und chrome und überleg mir mal lieber wie ich das umgehen kann.
folgendes verhalten will mir noch nicht in den kopf. zwei fast identische vorgänge mit unterschiedlichem resultat
variante A)
schritt 1: ich gehe z.b. auf die seite http://de.selfhtml.org/editorial/index.htm
schritt 2: dann klicke ich ich auf mein bookmarklet und es öffnet ne neue seite in nem neuen fenster namens "test".
schritt 3: ich geh wieder zum vorrigen tab und klicke dort mit STRG+"linke maustaste" auf den ersten link um ihn in nem neuen tab zu öffnen
schritt 4: in dem neuen tab klicke ich wieder auf mein bookmarklet.
resultat ==>> es aktualiesiert das bereits existierende fenster "test"
variante B)
schritt 1: ich gehe z.b. auf die seite http://de.selfhtml.org/editorial/index.htm
schritt 2: dann klicke ich ich auf mein bookmarklet und es öffnet ne neue seite in nem neuen fenster namens "test".
schritt 3: ich geh wieder zum vorrigen tab und klicke dort mit STRG+"linke maustaste" auf den ersten link um ihn in nem neuen tab zu öffnen
schritt 3,5: den tab mit der seite http://de.selfhtml.org/editorial/index.htm schließe ich
schritt 4: in dem neuen tab klicke ich wieder auf mein bookmarklet.
resultat ==>> es öffnet ein neues fenster "test"
der unterschied ist nur der kleine schritt 3.5 in variante B
was genau steckt da dahinter?
ich habe noch ein wenig weiter rumgetestet. also wenn ich mich immer auf der selben domain befinde und in der selben domain viele tabs öffne funktioniert es dass über mein bookmarklet immer das selbe fenster aktualisiert wird. wenn ich dann aber den tab schließe von dem aus mein bookmarklet zuletzt aufgerufen wurde, dann öffnet sich bei erneuten klicken des bookmarklets wieder ein neues fenster obwohl es mit dem selben tab vorher schon funktioniert hatte.
irgendwie echt komisch. da geht wohl anscheinend was verloren was immer nur in dem tab gespeichert wird von dem aus ich das bookmarklet zuletzt geöffnet hatte.
ich habe noch ein wenig weiter rumgetestet. also wenn ich mich immer auf der selben domain befinde und in der selben domain viele tabs öffne funktioniert es dass über mein bookmarklet immer das selbe fenster aktualisiert wird. wenn ich dann aber den tab schließe von dem aus mein bookmarklet zuletzt aufgerufen wurde, dann öffnet sich bei erneuten klicken des bookmarklets wieder ein neues fenster obwohl es mit dem selben tab vorher schon funktioniert hatte.
irgendwie echt komisch. da geht wohl anscheinend was verloren was immer nur in dem tab gespeichert wird von dem aus ich das bookmarklet zuletzt geöffnet hatte.
^^ das ist zumindest das verhalten im firefox.
im chrome ist es schlimmer. obwohl ich mich die ganze zeit auf der selben domain befinde öffnet er bei meinem bookmarklet immer nen neuen tab, wenn es nicht schonmal in dem selben tab aufgerufen wurde.
also 3 verschiedene browser ==> 3 verschiedene verhaltensweisen ==> ganz toll :/