[js] Javascript popups, is dit een goede methode?

Pagina: 1
Acties:

  • RwD
  • Registratie: Oktober 2000
  • Niet online

RwD

kloonikoon

Topicstarter
Ik heb een website gebouwd waarbij ik er op heb gelet dat de code valideerde gebruik makende van de strict.dtd. Nu is er een sectie op de website met links naar pdfs welke ik graag automatisch in een nieuw venster wil openen en het gebruikte documenttype biedt die optie niet (voor zover ik weet); target="_blank" kan dan nam,elijk niet in een link.

Als oplossing hiervoor had ik bedacht om via javascript alle elementen met een bepaalde klassenaam op te zoeken en deze een onclick event mee te geven dat naar de gevraagde url gaat in een nieuw venster. Het voordeel van deze methode is dat als javascript niet werkt de links niet dood zijn; de link opent dan standaard in hetzelfde venster. Een nadeel is dat het dus dan altijd een popup betreft zonder dat de gebruiker hier invloed op heeft.

Ook is het een nadeel dat wellicht popup blockers die iets minder goed geschreven of nogal strict ingesteld zijn een dergelijke popup kunnen blokkeren wat natuurlijk niet gewenst is. (Met deze reden open ik de link alsnog in het zelfde venster als de popup geblokkeerd is).

Ik heb zelf hiervoor dus javascript verzameld en geschreven, en vroeg mij af of de door mij beschreven/geschreven methode een goede methode is of dat er problemen schuilen in mn script...
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
    <title>tweakers voorbeeld</title>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-15">
    <script type="text/javascript">
        document.getElementsByClassName = function (needle) {
            // functie van crsip; geeft alle elementen terug met klassenaam needle
        }

        /*
         * Open a certain URL in a new window. If a popup blocker prevents this the link is opened in the
         * current window.
         */
        function fnOpen() {
            var strURL = this.href;
            var oNewWindow = window.open( strURL );
        
            if ( !oNewWindow ) {
                document.location.href = strURL;
            }
        
            return false;
        }
        
        /*
         * Assign an onclick event handler to all links having the classname strClassname
         */
        function fnAssignPopupLinks( strClassname ) {
            // Functie van crisp die alle elementen met die klassenaam op haalt
            var aAnchorList = document.getElementsByClassName( strClassname );
            i = aAnchorList.length;
        
            while (i--) {
                oAnchor     = aAnchorList[i];
        
                if ( oAnchor.href ) {
                    oAnchor.onclick = fnOpen;
                }
            }
        }
    </script>
</head>
<body>
    <p>Wat tekst hier, en een <a href="http://www.tweakers.net" class="newWindow">link</a> daar.</p>
    <script type="text/javascript">
        fnAssignPopupLinks( 'newWindow' );
    </script>
</body>
</html>


Korte samenvatting van wat gebeurd:
Alle elementen worden opgezocht met een bepaalde klassenaam, al deze elementen krijgen onclick de functie fnOpen toegewezen. Als er op zo'n element geklikt wordt dan wordt de link in een nieuw venster geopend, wordt dat venster na het openen niet gevonden dan opent de link alsnog in het eigen venster.

Deze methode werkt dus op iedere browser waarop ik het heb kunnen proberen en ik heb geen makkelijkere methode kunnen vinden. Ik kan mogelijk de fnOpen methode ietsjes aanpassen, maar de veranderingen die ik bedoel zijn niet bijzonder.

Wat vinden jullie er van??

  • André
  • Registratie: Maart 2002
  • Laatst online: 11:13

André

Analytics dude

Tja, wat moeten we er van vinden, het werkt toch? Alleen ik vind het nogal veel moeite om iets in een nieuw scherm te krijgen. Kun je gewoon geen mededeling plaatsen dat met shift-click er een nieuw scherm komt?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 16:18

crisp

Devver

Pixelated

Behalve dat het window.location is en niet document.location heb ik er weinig op aan te merken. Een soortgelijke methode gebruik ik ook hier op GoT voor externe links (behalve dat ik die markeer met het rel-attribuut, en stiekum in de JS-DOM toch een target attribuut genereer - dat laatste vanwege het feit dat veel tabbrowser extensies daar vanuit gaan).
Je zou eventueel ook nog af kunnen vangen of er wel met de linker muisknop is geklikt, en dat daarbij bijvoorbeeld niet nog de alt of shift-toets is ingedrukt. Ik heb gewoon een keuzemogelijkheid ingebouwd bij de voorkeuren zodat het uiteindelijk ook user-choice is, en behavior gescheiden is van opmaak.

[ Voor 13% gewijzigd door crisp op 22-06-2005 17:20 ]

Intentionally left blank


  • RwD
  • Registratie: Oktober 2000
  • Niet online

RwD

kloonikoon

Topicstarter
André schreef op woensdag 22 juni 2005 @ 17:09:
Tja, wat moeten we er van vinden, het werkt toch? Alleen ik vind het nogal veel moeite om iets in een nieuw scherm te krijgen. Kun je gewoon geen mededeling plaatsen dat met shift-click er een nieuw scherm komt?
Omdat target="_blank" makkelijker is maakt het dat geen goed argument natuurlijk. En dat je met shift-click het opent in een nieuw venster kan ik er best bij zetten, maar dat ziet niet mooi uit en ik heb wel eens korte uitleg bij dingen gegeven die door mensen gewoon niet gelezen wordt... Dus tja :S
crisp schreef op woensdag 22 juni 2005 @ 17:19:
Behalve dat het window.location is en niet document.location heb ik er weinig op aan te merken.
Ja, oeps, sterker nog ik had van windows.location document.location gemaakt omdat ik het effe andersom dacht. Naja :9
Een soortgelijke methode gebruik ik ook hier op GoT voor externe links (behalve dat ik die markeer met het rel-attribuut, en stiekum in de JS-DOM toch een target attribuut genereer - dat laatste vanwege het feit dat veel tabbrowser extensies daar vanuit gaan).
Ja, dat had ik gezien, maar dat wilde ik dus niet doen ;) ik heb overal trouwens rel="external" bij staan als ze naar buiten gaan. Zou ik natuurlijk ook kunnen gebruiken. Heb in de temperatuur van gisteren niet echt goed na gedacht blijkt maar weer. Wordt gekookt op mn werk :P
Je zou eventueel ook nog af kunnen vangen of er wel met de linker muisknop is geklikt, en dat daarbij bijvoorbeeld niet nog de alt of shift-toets is ingedrukt. Ik heb gewoon een keuzemogelijkheid ingebouwd bij de voorkeuren zodat het uiteindelijk ook user-choice is, en behavior gescheiden is van opmaak.
Wat moet ik dan bij alt-klik doen? En als je rechts klikt krijg ik een context-menu (overigens met de mogelijkheid de javascript code te omzeilen wat ik een pluspunt vindt). Wat moet ik dan bij shift klik doen; de link wordt al in een nieuw venster geopend...

Ik heb trouwens de functie veranderd zodat deze in plaats van className naar het rel attribuut zoekt, goed idee :P

[ Voor 8% gewijzigd door RwD op 22-06-2005 19:02 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 16:18

crisp

Devver

Pixelated

Bij shift-click zou je functie eigenlijk niets hoeven doen. Mogelijk dat het onder andere browsers /OS-en alt-click of ctrl-click is. Ik ben zo ver niet gegaan omdat ik de gebruiker al de mogelijkheid bied om de 'feature' uit te schakelen.

Intentionally left blank


  • RwD
  • Registratie: Oktober 2000
  • Niet online

RwD

kloonikoon

Topicstarter
crisp schreef op woensdag 22 juni 2005 @ 21:03:
Bij shift-click zou je functie eigenlijk niets hoeven doen. Mogelijk dat het onder andere browsers /OS-en alt-click of ctrl-click is. Ik ben zo ver niet gegaan omdat ik de gebruiker al de mogelijkheid bied om de 'feature' uit te schakelen.
Ik weet het niet hoor, bij shift klik juist in hetzelfde venster openen werkt toch alleen maar verwarrend? Ik gebruik shift instinctief en dan zou het daar ineens het tegenovergestelde effect hebben. Of bekijk ik het van de verkeerde kant? (Ik kijk of het handig/makkelijk/intuitief is voor gebruikers)

edit:
Je bedoelt natuurlijk dat de shift-klik niet de javascriptcode weer ongedaan maakt, maar dat de normale gang van zaken afgehandeld wordt oftewel een venster openen in een nieuw venster, niet?? Het kwartje viel wat laat...

[ Voor 17% gewijzigd door RwD op 22-06-2005 22:33 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 16:18

crisp

Devver

Pixelated

RwD schreef op woensdag 22 juni 2005 @ 22:28:
[...]
Ik weet het niet hoor, bij shift klik juist in hetzelfde venster openen werkt toch alleen maar verwarrend? Ik gebruik shift instinctief en dan zou het daar ineens het tegenovergestelde effect hebben. Of bekijk ik het van de verkeerde kant? (Ik kijk of het handig/makkelijk/intuitief is voor gebruikers)
shift-klik opent juist in een nieuw window (althans hier in Firefox onder windows); in dat geval hoef je de window.open dus niet uit te voeren omdat er toch al een nieuw window geopend wordt. Uiteraard maakt het in dat geval niet zoveel uit, maar stel dat een gebruiker middels een extensie zijn browser zo heeft geconfigged dat een shift-klik een nieuwe tab opent ipv een nieuw window. In dat geval geeft je JS niet het gewenste resultaat voor die gebruiker.
Daarom zeg ik dat je bij bepaalde toets/muisklik combinaties zou moeten overwegen om de afhandeling juist niet met javascript te doen maar over te laten aan de client.

Intentionally left blank

Pagina: 1