[jquery] window.opener in combinatie met Jquery dialog

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben applicatie aan het finetunen met jquery. Zonder jquery heb ik het volgende:

code:
1
2
3
4
5
6
7
//index.html
window.open("childpage.html", "blank", "toolbar=no,width=250,height=300");

//uiteindelijk in childpage.html

window.opener.rteInsertHTML(html);
window.close();


Dit werkt goed. In index.html wordt "mijnFunctie" aangeroepen en uitgevoerd

Nu wil ik gebruik maken van een jquery dialog waar ik "childpage.html" in open.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$(document).ready(function() { 
    var dialogOpts = {
        title: "jquery dialog",
        modal: true,
        autoOpen: false,
        height: 500,
        width: 500,
        open: function() {
        //display correct dialog content
        $("#example").load("../html/childpage.html");}
        };
    
    $("#example").dialog(dialogOpts);    //end dialog
    
    $('#showdialog').click(
        function (){
            $("#example").dialog("open");
            return false;
        }
    );  
});


Uiteraard heb ik verder in de pagina de div "example" gedefinieerd.
Dit werkt prima en "childpage.html" wordt geopend in een jquery dialoog. Alléén "window.opener.mijnFunctie(argument);" werkt in deze situatie niet. "window.opener is leeg of geen object" is de melding.

Ik zoek op internet naar oplossing maar kom er nog niet uit. Iemand een suggestie?

Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Verwijderd schreef op woensdag 28 oktober 2009 @ 12:19:

Dit werkt prima en "childpage.html" wordt geopend in een jquery dialoog. Alléén "window.opener.mijnFunctie(argument);" werkt in deze situatie niet. "window.opener is leeg of geen object" is de melding.

Ik zoek op internet naar oplossing maar kom er nog niet uit. Iemand een suggestie?
Je begrijpt niet hoe de load functie werkt, zie ik. Load laadt een html document in via een XmlHttpRequest, pakt vervolgens alle HtmlElement nodes uit de body tag van dat document en kopieert deze naar het huidige document. Het opent helemaal niet een echt nieuw venster. Er bestaat dan dus ook geen window.opener.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
R4gnax schreef op woensdag 28 oktober 2009 @ 12:48:
[...]


Je begrijpt niet hoe de load functie werkt, zie ik. Load laadt een html document in via een XmlHttpRequest, pakt vervolgens alle HtmlElement nodes uit de body tag van dat document en kopieert deze naar het huidige document. Het opent helemaal niet een echt nieuw venster. Er bestaat dan dus ook geen window.opener.
Ah, dat wist ik inderdaad niet. Is er dan een andere manier om die functie in mijn index.html aan te roepen?

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op woensdag 28 oktober 2009 @ 13:06:
[...]

Ah, dat wist ik inderdaad niet. Is er dan een andere manier om die functie in mijn index.html aan te roepen?
Wat gebeurt er in childpage.html?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op woensdag 28 oktober 2009 @ 13:10:
[...]


Wat gebeurt er in childpage.html?
index.html is een soort editor. Als ik daar klik op de button "insert image" wordt childpage.html geopend. Hier geef je aan welk image je wil inserten en zet je een aantal eigenschappen (bv align). Vervolgens wordt dit omgezet naar een "html string" Deze string pak ik op in index.html en wordt het image in de editor geplaatst.

Acties:
  • 0 Henk 'm!

  • Joolee
  • Registratie: Juni 2005
  • Niet online
je kunt een functie welke in index.html staat direct aanroepen in childpage.html.

Open eens het venster in Firefox, selecteer alle text (ctrl+a), klik met rechtermuisknop en kies voor "view selection source." Dan zie je dat de inhoud van childpage.html direct in je index.html is geïnjecteerd.
Dat betekend dus ook dat je geen <html> e.d. meer hoeft te gebruiken in childpage.html

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Joolee schreef op woensdag 28 oktober 2009 @ 13:39:
je kunt een functie welke in index.html staat direct aanroepen in childpage.html.

Open eens het venster in Firefox, selecteer alle text (ctrl+a), klik met rechtermuisknop en kies voor "view selection source." Dan zie je dat de inhoud van childpage.html direct in je index.html is geïnjecteerd.
Dat betekend dus ook dat je geen <html> e.d. meer hoeft te gebruiken in childpage.html
Dat werkt inderdaad (hoe simpel kan het wezen).

[ Voor 30% gewijzigd door Verwijderd op 28-10-2009 14:12 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Toch nog een nabrander. Zodra ik in het dialoog iets in ga vullen ben ik de focus op de parentpagina kwijt (cursor stond in een tekstvak). Hoe kan ik die focus weer terug krijgen (na, tijdens het afsluiten van het dialoog)?

Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Verwijderd schreef op donderdag 29 oktober 2009 @ 08:40:
Toch nog een nabrander. Zodra ik in het dialoog iets in ga vullen ben ik de focus op de parentpagina kwijt (cursor stond in een tekstvak). Hoe kan ik die focus weer terug krijgen (na, tijdens het afsluiten van het dialoog)?
Je zou kunnen proberen om een referentie naar het huidig gefocuste element in de DOM tree op te vragen net voordat je de dialoog opent en wanneer de dialoog gesloten wordt de focus weer op dat element terug te zetten, maar ik weet niet hoe goed dat onder alle browsers gaat werken...

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op donderdag 29 oktober 2009 @ 08:40:
Toch nog een nabrander. Zodra ik in het dialoog iets in ga vullen ben ik de focus op de parentpagina kwijt (cursor stond in een tekstvak). Hoe kan ik die focus weer terug krijgen (na, tijdens het afsluiten van het dialoog)?
Is het altijd hetzelfde tekstkvak?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op donderdag 29 oktober 2009 @ 17:46:
[...]


Is het altijd hetzelfde tekstkvak?
Ja, het is een soort van editor dus alles moet in datzelfde tekstvak gevoegd worden

Acties:
  • 0 Henk 'm!

Verwijderd

Misschien zoiets toevoegen aan je dialogopts dan?

code:
1
2
3
close: function() {
  $("idvantekstvak").focus();
}


Ga ik er wel van uit dat je jquery dialog gebruikt..

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
effe proberen

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op donderdag 29 oktober 2009 @ 20:18:
Misschien zoiets toevoegen aan je dialogopts dan?

code:
1
2
3
close: function() {
  $("idvantekstvak").focus();
}


Ga ik er wel van uit dat je jquery dialog gebruikt..
Dat werk inderdaad. Super!!
Ik doe vervolgens een pasteHTML met als gevolg dat het vooraan in mijn tekstvak komt te staan. Dus voor mijn al bestaande tekst. Dat is lastig. Ik zou het juist achter of tussen mijn bestaande tekst willen hebben. Heeft iemand hier toevallig nog een suggestie voor? Eigenlijk moet ik dus de plek van de cursor onthouden voor ik de dialog open

[ Voor 6% gewijzigd door Verwijderd op 29-10-2009 20:58 ]


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Verwijderd schreef op donderdag 29 oktober 2009 @ 20:50:
[...]

Dat werk inderdaad. Super!!
Ik doe vervolgens een pasteHTML met als gevolg dat het vooraan in mijn tekstvak komt te staan. Dus voor mijn al bestaande tekst. Dat is lastig. Ik zou het juist achter of tussen mijn bestaande tekst willen hebben. Heeft iemand hier toevallig nog een suggestie voor? Eigenlijk moet ik dus de plek van de cursor onthouden voor ik de dialog open
De positie van de caret (dat is de correcte naam voor de tekst cursor) kun je opvragen. Alle browsers behalve IE gebruiken daarvoor de selectionstart en selectionend properties. IE heeft daar een compleet eigen mechanisme voor wat in het geval van meerlijnige input zoals textareas ook nog eens verschrikkelijk irritante eigenaardigheden bevat.

Dat wordt googlen en uit proberen, ben ik bang.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
R4gnax schreef op donderdag 29 oktober 2009 @ 21:06:
[...]


De positie van de caret (dat is de correcte naam voor de tekst cursor) kun je opvragen. Alle browsers behalve IE gebruiken daarvoor de selectionstart en selectionend properties. IE heeft daar een compleet eigen mechanisme voor wat in het geval van meerlijnige input zoals textareas ook nog eens verschrikkelijk irritante eigenaardigheden bevat.

Dat wordt googlen en uit proberen, ben ik bang.
Dan weet ik in ieder geval al waar ik op moet zoeken. Bedankt.

Acties:
  • 0 Henk 'm!

  • Kiphaas7
  • Registratie: Februari 2005
  • Laatst online: 17-09 21:21
Er bestaan daarvoor jquery plugins, alhoewel het de moeite kan zijn om even zelf uit te zoeken hoe het zit (code is redelijk beperkt, ± 20 regels). Laatste keer dat ik er een (vage) plugin voor gebruikte, bokte deze in IE8 of opera 10.

Anyway, als je wat nuttigs vind, laat het even weten :).

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Kiphaas7 schreef op donderdag 29 oktober 2009 @ 23:56:
Er bestaan daarvoor jquery plugins, alhoewel het de moeite kan zijn om even zelf uit te zoeken hoe het zit (code is redelijk beperkt, ± 20 regels). Laatste keer dat ik er een (vage) plugin voor gebruikte, bokte deze in IE8 of opera 10.

Anyway, als je wat nuttigs vind, laat het even weten :).
Doe ik. In ijn geval is het een applicatie die in eerste instantie alléén in IE hoeft te werken dus dat maakt het minder complex

Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Verwijderd schreef op vrijdag 30 oktober 2009 @ 10:19:
[...]

Doe ik. In ijn geval is het een applicatie die in eerste instantie alléén in IE hoeft te werken dus dat maakt het minder complex
Niet echt. De bulk van de complexiteit zit 'em er in om de IE-case juist af te handelen. De case die alle andere browsers afhandelt is 3 regels of zo.

Het kàn overigens vrij simpel in 20 regels voor IE, maar dat werkt alleen goed op enkel-lijnige input. Meerlijnige input zoals textareas doet schijnbaar iets héél vreemds met de character count wanneer er carriage returns en line feeds in zitten, wat ook nog eens van IE versie tot IE versie schijnt te verschillen. (Oh joy!)
Pagina: 1