Toon posts:

[JS] Object van parentwindow aanroepen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

Ik ben bezig met het invoegen van een link in een RTE waarbij ik vanuit het link-venster (geopenede window) de selectie wil opvragen van de opener.
Nu heb ik een object-variabele 'editor' die ik wil aanroepen vanuit de child window en vanuit daar de functie van de editor aanroepen (die dus in de parentwindow staat) om de selectie van de parent te kunnen achterhalen.

Als ik de variabele 'editor' alert in de parent krijg ik netjes 'object' terug maar als ik dat doe vanuit de child dan krijg ik 'undefined' terug.

De aanroep vanuit de child window gaat alsvolgt:
JavaScript:
1
2
3
4
window.onload = function()
{
    alert(window.opener.editor);
}

De editor zelf bouw ik zo op:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
var editor;

function editor(editorID, bronID)
{
    editor = this;
    editor.editorWindow = document.getElementById(editorID).contentWindow;
    editor.editorDocument = document.getElementById(editorID).contentWindow.document;
    editor.editorDocument.designMode = 'On';
    
    editor.editorDocument.open();
    editor.editorDocument.write(document.getElementById(bronID).value);
    editor.editorDocument.close();
}

Die lelijke editor variabele gebruik ik omdat ik anders het this object telkens verlies. Misschien heeft het daarmee te maken of dat het beter anders kan?

De vraag is in principe; hoe kan ik de selectie opvragen middels de editor op de opener?

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

dude, gebruik nooit dezelfde naam voor een functie en een global variabele...

Intentionally left blank


Verwijderd

Topicstarter
Ik heb nu de variabelenaam veranderd maar ik heb nog steeds hetzelfde resultaat.

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Dat verhaal met het 'this' keyword komt overigens ook vreemd op me over. Als je je function editor als een soort class wil gebruiken dan zou je zoiets moeten doen:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
function editor(editorID, bronID)
{
    this.editorWindow = document.getElementById(editorID).contentWindow;
    this.editorDocument = document.getElementById(editorID).contentWindow.document;
    this.editorDocument.designMode = 'On';
    
    this.editorDocument.open();
    this.editorDocument.write(document.getElementById(bronID).value);
    this.editorDocument.close();
}

var myeditor = new editor('foo', 'bar');


Vervolgens kan je dmv prototyping methods aan je editor class hangen.
Bijvoorbeeld:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
editor.prototype =
{
    getSelection: function()
    {
        var selection = '';

        // doe iets; 'this' verwijst naar je editor instance

        return selection;
    }
}

vanuit je window kan je dan dit doen:
JavaScript:
1
var selection = window.opener.myeditor.getSelection();

[ Voor 28% gewijzigd door crisp op 04-05-2006 16:40 ]

Intentionally left blank


Verwijderd

Topicstarter
Ik heb het geheel nu opgebouwd adhv jouw voorbeeld maar op 1 of andere manier kent hij de variabele 'oEditor' niet vanuit de childwindow. Hij kent 'm wel (uiteraard) als ik 'm alert in de parent (waar hij ook in wordt aangemaakt).
Ik heb nu op een paar manieren de variabele 'oEditor' proberen aan te maken maar in geen van de gevallen kent hij 'm vanuit de childwindow.
JavaScript:
1
2
3
4
window.onload = function()
{
    oEditor = new editor('editor', 'code');
}

JavaScript:
1
2
3
4
window.onload = function()
{
    var oEditor = new editor('editor', 'code');
}
Ook al maak ik een testvariabele aan, var q = 4, en vraag dat op dan geeft ie ook undefined. Iemand een idee?

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Wacht even, zo te zien hebben we het hier niet over een geopende window (popup) maar over een iframe. In dat geval moet je de 'parent' aanspreken ipv de 'opener'

Intentionally left blank


Verwijderd

Topicstarter
Het is wel een popup. Ik noemde de popup de child van de parent, volgens mij is dat ook goed om dat zo te zeggen toch?

Anyway, ik ben er inmiddels uit.. je gelooft het niet maar het is echt waar. Een ctrl+F5 op de popup en jahoor.. alert nu netjes het object editor!

Voor elkaar dus! Bedankt!
Pagina: 1