Cross-page JS popup interactie

Status
Niet open voor verdere reacties.

RMS123

Gebruiker
Lid geworden
15 nov 2009
Berichten
873
Hallo,

Ik ben al een hele tijd zonder resultaat op zoek naar een methode om een popup aan te sturen vanaf het main-window, in meerdere pagina's:
Dus, in ene pagina staat de code:

var test1 = window.open('popup.htm','popup','width=400,height=252,scrollbars=no,toolbar=no,location=no,resizable=no')

vervolgens kan ik alles met dit window doen wat ik er mee wil, door hem met de test1 variabele te targetten.

Maar, als ik de page refresh, of navigeer naar een andere pagina, moet ik nog steeds toegang hebben tot de pagina. Hoe doe ik dat?
Met een cookie is het niet gelukt tot nu toe, en andere concrete manieren heb ik nog niet gevonden.

Ik ben er wel vrij zeker van dat het kan, phpmyadmin heeft ook zoiets met het querywindow.

Alvast bedankt!

PS: aan de helpmij.nl admins:
Als ik JS of andere code tags gebruik, en dan op "voorbeeld van bericht" klik, dan komt daar de code uitgewerkt te staan, en ook uitgewerkt in de editor, daar zou het tussen JS tags moeten blijven staan.
Niet duidelijk wat het probleem is? mail dan ff of skype ff.


EDIT:
Na wat zoeken kwam ik dit nog tegen, het is hetzelfde concept als wat ik nu heb:
http://developer.longtailvideo.com/contributors/nyboe/JW_API_xmpl_7-3-0-0.html
dit is dus niet wat het moet worden, maar om een idee te geven hoe het IS
 
Laatst bewerkt:
Bedoel je dit?
In regel 2 krijg je gewoon de popup als hij al bestaat, en anders wordt 'ie voor je gemaakt ;)

[JS]function getOrCreate(url, name) {
var popWin = window.open("", name);
if (popWin.location.toString() == "about:blank") {
popWin = window.open.apply(window, arguments);
}
return popWin;
}
function main() {

var test1 = getOrCreate("popup.html", "popup", 'width=400,height=252,scrollbars=no,toolbar=no,location=no,resizable=no');

//do stuff with test1

}
window.onload = main;[/JS]
 
Laatst bewerkt:
Bedankt voor de reactie

sorry, ik kom er niet helemaal uit.
Wat je hier doet is, je maakt een nieuw window, en kijkt of die leeg is.
dan is die dus altijd leeg.

dan werkt mijn oude manier ook goed:
[JS]if (!test1) {
window.open(......)
}[/JS]

Maar het probleem is nou juist dat die test1 variabele op de volgende pagina niet meer bestaat.

EDIT:
is het mogelijk om test1 in een cookie te zetten?
 
Laatst bewerkt:
Andere methode misschien?
  1. Op elke pagina dezelfde css-popup zetten, die standaard uit staat.
  2. Bediening met een javascript onclick-functie die de popup aan zet, en tevens een cookie "popupAan" plaatst.
  3. Elke pagina begint met een javascript-check op het cookie: als niet aanwezig, niets doen; als wel, dan popup tonen.
  4. Popup uitzetten op dezelfde manier: sloopt tevens het cookie.
De bezoeker kan dan niet de popup verslepen (of er moet een drag&drop functie bij).
Als de popup tijdsafhankelijke dingen bevat (bv. een achtergrondmuziekje), gaat het feest niet door: dat start dan elke keer opnieuw.

Of anders wellicht:
  1. De oude window.open methode + cookie plaatsen.
  2. Losse functie voor uitzetten: cookie verwijderen.
  3. En dan op de popup-pagina een interval-functie zetten, die om de zoveel sec. checkt of het cookie er nog is, en anders het venster sluit.

Met vriendelijke groet,
CSShunter
__________
PS @RMS123
Jammer dat je deze pagina niet kunt zien als je Temp Internet Bestanden-map op de C-schijf zit: de ca. 260kB van deze pagina passen niet in max. 8kB. ;)
 
Laatst bewerkt:
Bedankt!

Ik ga denk ik de cookie-methode opnieuw proberen aangezien er nog andere data opgeslagen moet worden.
 
Wat je hier doet is, je maakt een nieuw window, en kijkt of die leeg is.
dan is die dus altijd leeg.
Dat klopt niet helemaal ;) Als er namelijk een popup bestaat die geopend is met dezelfde naam ("popup", tweede argument), dan krijg je die popup in je variabele :) Ofwel: window.open opent alleen een popup als er nog géén bestaat met de aangegeven naam.
 
Laatst bewerkt:
Hallo,

Ik kom er niet helemaal uit met de cookies.
Ik gebruik de volgende code, die ik van ie heb geplukt. De code klopt volgens mij helemaal
[JS]

function setCookie(c_name,value,exdays) {
var exdate=new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
document.cookie=c_name + "=" + c_value;
}

function getCookie(c_name) {
var i,x,y,ARRcookies=document.cookie.split(";");
for (i=0;i<ARRcookies.length;i++) {
x=ARRcookies.substr(0,ARRcookies.indexOf("="));
y=ARRcookies.substr(ARRcookies.indexOf("=")+1);
x=x.replace(/^\s+|\s+$/g,"");
if (x==c_name) {
return unescape(y);
}
}
}[/JS]

Ik kan dus de cookie opslaan, en ophalen, dat lukt ook nog waarna ik de pagina ververs.
echter kom ik er vanaf m'n index.php wel bij, maar niet via mijn popup window. Da's wel raar.
Hoe kan dat komen?

Alvast bedankt!

EDIT:
Met dank aan chrome's element inspecteren ben ik er achtergekomen dat de cookie een path heeft, moet het path van de pagina waar je de cookie nodig hebt hetzelfde zijn als waar je hem hebt geset? zoja, hoe verander ik dan dat path?
 
Laatst bewerkt:
Hoi RMS123,
Ja, als een path is opgegeven, werkt het cookie (als default) alleen voor dat path.

Voor het setten en getten van een cookie gebruik ik deze combinatie:
[JS]// basics from http://www.elated.com/articles/javascript-and-cookies/
// adapted by francky www.developerscorner.nl

function set_cookie( name, value, path ) {
var cookie_string = name + "=" + escape ( value );
if ( path )
cookie_string += "; path=" + escape ( path );
document.cookie = cookie_string;
}

/* http://techpatterns.com/downloads/javascript_cookies.php */
function get_cookie( check_name ) {
// first we'll split this cookie up into name/value pairs
// note: document.cookie only returns name=value, not the other components
var a_all_cookies = document.cookie.split( ';' );
var a_temp_cookie = '';
var cookie_name = '';
var cookie_value = '';

var i;
for ( i = 0; i < a_all_cookies.length; i++ )
{
// now we'll split apart each name=value pair
a_temp_cookie = a_all_cookies.split( '=' );
// and trim left/right whitespace while we're at it
cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');

// if the extracted name matches passed check_name
if ( cookie_name == check_name )
{
cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
return cookie_value;
break;
}
a_temp_cookie = '';
cookie_name = '';
}
return "nothing";
}[/JS]
Bij het opgeven van het cookie name/value-paar wordt met "/" het path op "alles in de site" gezet:
[JS]set_cookie( name, value, "/" )[/JS]
Hiermee is het koekje op elke pagina beschikbaar om het op te eten.

Met vriendelijke groet,
CSShunter
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan