Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

nieuw venster opent niet

teacher
6 antwoorden
  • Onderstaande code heb ik verkregen via de site http://www.datisgaaf.nl/geo/tutorial/


    Ik heb de code voor een deel aangepast maar op een bepaald stuk werkt het niet goed. Het is de bedoeling dat er markers worden geplaatst op een Google map. Als op een marker geklikt wordt verschijnt er een infoschermpje waar ook een hyperlink wordt getoond. Het is de bedoeling dat als er op de link wordt geklikt, een nieuw venster wordt geopend…..en dat gebeurt dus niet :cry:

    Het stukje code waar het om gaat kun je vinden vanaf de tekst :
    // hierna mijn eigen versie

    Kunnen jullie aangeven wat er fout is….Ik heb het hele weekend al gezocht, en al van alles geprobeerd.
    als ik het eigen stukje code los laat uitvoeren, wordt er wel een nieuw venster geopend

    [code:1:eae26d2005]
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <style>
    all.clsMenuItemNS, .clsMenuItemIE{text-decoration: none; font: bold 12px Tahoma; color: FF0000; cursor: hand; z-index:100}
    #MainTable A:hover {color: FF0000;}
    </style>
    <font face="Tahoma">Op deze pagina zie je de door mij gevonden caches. Klik er op om meer informatie te zien over de cache.&nbsp;</font>
    </body>
    </html>

    <?PHP
    function openDatabase() {
    $mysqllink = mysql_connect("localhost", "gebruikersnaam", "wachtwoord")
    or die("Kan geen verbinding maken");
    mysql_select_db("databasenaam")
    or die("Kan geen database selecteren");
    }
    function closeDatabase() {
    mysql_close();
    }
    function getIconType($type) {

    switch($type) {
    case "trad.png":
    $retval = "normal";
    break;
    case "mystery.png":
    $retval = "mystery";
    break;
    case "multi.png":
    $retval = "multi";
    break;
    case "virtual.png":
    $retval = "virtual";
    break;
    case "earth.png":
    $retval = "earth";
    break;
    case "webcam.png":
    $retval = "webcam";
    break;
    case "letter.png":
    $retval = "letter";
    break;
    case "event.png":
    $retval = "event";
    break;
    case "mine.png":
    $retval = "mine";
    break;
    default:
    $retval = "normal";
    break;
    }
    return $retval;
    }
    ?>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>Gevonden geocaches</title>
    <style type="text/css">
    .style1 {background-color:#ffffff;font-weight:bold;border:2px #006699 solid;}
    </style>
    <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=<ABQIAAAAzy0ujHWK0OoBg3wxPwiAdBRIbjDsmTns80yOyLafHZfkM5VtmBQ_q4U_nyZSDEWDFousnwrIjOE2sg>"
    type="text/javascript"></script>
    <script type="text/javascript">

    var mouseWheelZoomMap=null;
    var keyMap = null;

    function MouseWheelZoom(map){
    if(map==mouseWheelZoomMap)
    return;
    if(mouseWheelZoomMap!=null)
    MouseWheelZoomOff();
    mouseWheelZoomMap=map;
    var container=mouseWheelZoomMap.getContainer();
    if(container.addEventListener)
    container.addEventListener('DOMMouseScroll',MouseWheelZoomHandler,false);
    else
    container.onmousewheel=window.onmousewheel=document.onmousewheel=MouseWheelZoomHandler;
    }

    function MouseWheelZoomOff(){
    if(mouseWheelZoomMap!=null){
    var container=mouseWheelZoomMap.getContainer();
    if(container.removeEventListener)
    container.removeEventListener('DOMMouseScroll',MouseWheelZoomHandler,false);
    else
    container.onmousewheel=window.onmousewheel=document.onmousewheel=null;
    mouseWheelZoomMap=null;
    }
    }

    function MouseWheelZoomHandler(e){
    var data=0;
    if (!e)
    e = window.event;
    if (e.wheelDelta) {
    data = e.wheelDelta/120;
    if (window.opera)
    data = -delta;
    } else if (e.detail) {
    data = -e.detail/3;
    }
    if(e!=null){
    if(e.wheelData!=null){
    data=e.wheelData
    if(window.opera)
    data=-data;
    }else if(e.detail!=null)
    data=-e.detail;
    if(data>0)
    mouseWheelZoomMap.setZoom(mouseWheelZoomMap.getZoom()+1);
    else if(data<0)
    mouseWheelZoomMap.setZoom(mouseWheelZoomMap.getZoom()-1);
    }
    if (event.preventDefault){
    event.preventDefault();
    event.returnValue = false;
    }
    }

    function keyHandler(e){
    if(keyMap != null){
    if (typeof e == 'undefined') {
    e = window.event;
    }
    if (e.which){
    keycode = e.which;
    }else{
    keycode = window.event.keyCode;
    }
    if(keycode == 33)
    keyMap.setZoom(keyMap.getZoom()+1);
    if(keycode == 34)
    keyMap.setZoom(keyMap.getZoom()-1);
    }
    }
    document.onkeyup=keyHandler;

    function LoadKeyHandler(map){
    if(!map){
    keyMap = null;
    }else{
    keyMap = map;
    if(window.addEventListener){
    window.addEventListener('keydown',keyHandler,false);
    }
    }
    }

    //<![CDATA[
    var normal = new GIcon();
    normal.image = "trad.png";
    normal.iconSize = new GSize(12,20);
    normal.iconAnchor = new GPoint(6,20);
    normal.infoWindowAnchor = new GPoint(5,5);
    normal.infoShadowAnchor = new GPoint(5,5);
    var mystery = new GIcon(normal);
    mystery.image = "mystery.png";
    var virtual = new GIcon(normal);
    virtual.image = "virtual.png";
    var multi = new GIcon(normal);
    multi.image = "multi.png";
    var earth = new GIcon(normal);
    earth.image = "earth.png";
    var webcam = new GIcon(normal);
    webcam.image = "webcam.png";
    var letter = new GIcon(normal);
    letter.image = "letter.png";
    var event = new GIcon(normal);
    event.image = "event.png";
    var mine = new GIcon(normal);
    mine.image = "mine.png";
    function URLDecode(str)
    {
    // Replace + with ' '
    // Replace %xx with equivalent character
    // Put [ERROR] in output if %xx is invalid.
    var HEXCHARS = "0123456789ABCDEFabcdef";
    var encoded = str;
    var plaintext = "";
    var i = 0;
    while (i < encoded.length) {
    var ch = encoded.charAt(i);
    if (ch == "+") {
    plaintext += " ";
    i++;
    } else if (ch == "%") {
    if (i < (encoded.length-2)
    && HEXCHARS.indexOf(encoded.charAt(i+1)) != -1
    && HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
    plaintext += unescape( encoded.substr(i,3) );
    i += 3;
    } else {
    alert( 'Bad escape combination near …' + encoded.substr(i) );
    plaintext += "%[ERROR]";
    i++;
    }
    } else {
    plaintext += ch;
    i++;
    }
    } // while
    return plaintext;
    }

    function load() {
    if (GBrowserIsCompatible()) {
    var map = new GMap2(document.getElementById("map"));
    LoadKeyHandler(map);
    MouseWheelZoom(map);
    map.addControl(new GLargeMapControl());
    map.addControl (new GScaleControl ());
    map.addControl(new GOverviewMapControl());
    map.addControl(new GMapTypeControl());
    map.setCenter(new GLatLng(52.355474,5.432739), 6);

    // Creates a marker at the given point with the given number label
    function createMarker2(point, str, icon, thename) {
    var thename2 = URLDecode(thename);
    var marker = new GMarker(point, {icon: icon, clickable: true, title:thename2});

    //var marker = new GMarker(point,icon, );
    GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(URLDecode(str));
    });

    return marker;
    }

    <?PHP
    openDatabase();

    $query1 = "Select * FROM geo_nl";
    $result1 = mysql_query($query1);
    $teller=0;
    while($row1=mysql_fetch_object($result1)) {
    //$code = urlencode($row1->code);
    $code = urlencode($row1->toelichting);
    $naam = urlencode($row1->naam);
    $datumstr = urlencode($row1->datum);
    $datum = strtotime($datumstr);
    $type = urlencode($row1->type);
    $xlat = urlencode($row1->xlat);
    $ylat = urlencode($row1->ylat);
    $url=urlencode($row1->url);

    {
    $str = "<TABLE BORDER=\"1\"><TR><td><b>Type</b></TD><td><img src=\"http:"."//www.datisgaaf.nl/geo/found/".strtolower($row1->type)."\" alt=\"\"/></td></TR><tr><TD><b>Code</b></TD><TD>$code</TD></TR><TR><TD><b>Naam</b></TD>";
    $str = $str . "<TD>$naam</TD></TR><TR><TD><b>Datum gevonden</b></TD><TD>" . date("d-m-Y",$datum) . "</TD></TR><TR>";
    //$str = $str . "<TD><b>Link</b></TD><TD><a href=" . chr(34);
    //$str = $str . "http://www.geocaching.com/seek/cache_details.aspx?wp=$code" . chr(34) . "// onclick=" . chr(34);
    //$str = $str . "window.open('http://www.geocaching.com/seek/cache_details.aspx?wp=$code');return false;";
    //$str = $str . chr(34) . ">klik hier</a></TD></TR></TABLE>";

    // hierna mijn eigen versie
    $urlstring="fontaine.html";
    //$str = $str . "<TD><b>Link</b></TD><TD><a href=" . chr(34);
    $str = $str . "<TD><b>Link</b></TD><TD><a href=" . chr(34);
    $str = $str . "http://www.spitsmuis.woelmuis.nl/$urlstring" . chr(34) . " onclick=" . chr(34);
    $str = $str . "window.open('http://spitsmuis.woelmuis.nl/$urlstring');return false;";
    //$str = $str . "window.open('http://www.spitsmuis.woelmuis.nl/fontaine.html';return false;";
    $str = $str . chr(34) . ">klik hier</a></TD></TR></TABLE>";
    //tot hier mijn eigen versie


    echo "var point = new GLatLng(" . $xlat . "," . $ylat . ");
    ";
    $iconstr = getIconType($type);
    echo "map.addOverlay(createMarker2(point,'$str',$iconstr,'$naam'));
    ";
    }
    }
    closeDatabase();
    ?>

    }
    }

    //]]>
    </script>
    </head>
    <body onload="load()" onunload="GUnload()" bgcolor="#e0e0e0">
    <div id="map" style="width: 100%; height: 95%">Bezig met Laden even geduld aub</div>

    <TABLE BORDER="0">
    <TR>
    <TD><font color="black" face="Tahoma">&nbsp; <img src="trad.png"></font></TD>
    <TD><font color="black" face="Tahoma">Traditional</font></TD>
    <TD><font color="black" face="Tahoma">|&nbsp; <img src="multi.png"></font></TD>
    <TD><font color="black" face="Tahoma">Multi</font></TD>
    <TD><font color="black" face="Tahoma">|&nbsp; <img src="mystery.png"></font></TD>
    <TD><font color="black" face="Tahoma">Mystery</font></TD>
    <TD><font color="black" face="Tahoma">|&nbsp; <img src="webcam.png"></font></TD>
    <TD><font color="black" face="Tahoma">Webcam</font></TD>
    <TD><font color="black" face="Tahoma">|&nbsp; <img src="virtual.png"></font></TD>
    <TD><font color="black" face="Tahoma">Virtual</font></TD>
    <TD><font color="black" face="Tahoma">|&nbsp; <img src="earth.png"></font></TD>
    <TD><font color="black" face="Tahoma">Earth</font></TD>
    <TD><font color="black" face="Tahoma">|&nbsp; <img src="letter.png"></font></TD>
    <TD><font color="black" face="Tahoma">Letterbox &nbsp;</font></TD>
    <TD><font color="black" face="Tahoma">|&nbsp; <img src="event.png"></font></TD>
    <TD><font color="black" face="Tahoma">Event &nbsp;</font></TD>
    <TD><font color="black" face="Tahoma">|&nbsp; <img src="mine.png"></font></TD>
    <TD><font color="black" face="Tahoma">My caches &nbsp;</font></TD>
    </TR>
    </TABLE>

    </body>
    </html>

    </body>
    </html>
    [/code:1:eae26d2005]
  • Ik neem aan dat het om het stukje met window.open gaat. Twee opmerkingen:
    1. Heb je gecontroleerd of het nieuwe venster niet tegengehouden wordt door een popup-blocker?
    2. Probeer aan window.open eens als 2e argument '_blank' mee te geven.
  • Dat is inderdaad het gedeelte waar het om gaat. Er is geen pop-up blocker die het openen tegenhoudt (of het zou al in de code geregeld moeten zijn).

    Ook het toevoegen van de _ blank optie helpt niet, sterker nog dan laadt de pagina in het geheel niet goed. Ik ga er van uit dat de door jou voorgestelde aanpassing er zo uit moet zien :
    $str = $str . "window.open('http://spitsmuis.woelmuis.nl/$urlstring','_blank');return false;"

    Wat ik erg vreemd vind, is dat als ik stukje code waarin de variabele $str wordt opgebouwd als aparte code uitvoer. met toevoeging echo $str, er wel een nieuw scherm wordt geopend na het klikken op de link.

    Je zou dus denken dat het laden van een nieuw scherm wellicht elders in de code wordt geblokkeerd, ik kan echter niet vinden waar.
  • Nu ik nog eens naar de code kijk denk ik dat je een probleem hebt met quotes. Je bouwt $str op met een aantal single quotes erin. Met chr(34) en ' gebruik je php-escapes waardoor de single quotes normaal in de php-string terecht komen. Later doe je echter een php-echo zodat de inhoud van $str in javascript-code terecht komt. Hier staat deze inhoud echter tussen …. single quotes, waardoor javascript het niet meer begrijpt (single quotes tussen single quotes). De oplossing is volgens mij om de single quotes in php al dubbel te 'escapen'. Ik denk dat het ongeveer zo moet, maar heb dit niet getest:
    [code:1:40a49f3292]// hierna mijn eigen versie
    $urlstring="fontaine.html";
    //$str = $str . "<TD><b>Link</b></TD><TD><a href=" . "\\'";
    $str = $str . "<TD><b>Link</b></TD><TD><a href=\\'";
    $str = $str . "http://www.spitsmuis.woelmuis.nl/$urlstring\\'" . " onclick=\\'";
    $str = $str . "window.open(\\'http://spitsmuis.woelmuis.nl/$urlstring\\');return false;";
    //$str = $str . "window.open(\\'http://www.spitsmuis.woelmuis.nl/fontaine.html\\';return false;";
    $str = $str . "\\'>klik hier</a></TD></TR></TABLE>";
    //tot hier mijn eigen versie
    [/code:1:40a49f3292]
  • Helaas,deze versie doet het ook niet. Het probleem is dat ik op een gegeven moment door de bomen het bos niet meer ziet met al die (dubbele) apostrophes.

    Ik blijf zoeken
  • Bij mij werkt dit goed:
    [code:1:d8ac388788]$urlstring="fontaine.html";
    $str = $str . "<TD><b>Link</b></TD><TD><a href=";
    $str = $str . "\"http://www.spitsmuis.woelmuis.nl/".$urlstring."\" onclick=\"";
    $str = $str . "window.open('http://spitsmuis.woelmuis.nl/".$urlstring."');return false;";
    $str = $str ." \">klik hier</a></TD></TR></TABLE>";
    echo $str;[/code:1:d8ac388788]

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.