Hallo allen,
Ik bouw een CMS dat gebruik maakt van frames.
Frame 'preview' laat een preview van de website zien waar aan wordt gewerkt.
Frame 'browser' laat een browser zien en laadt eigenschappen van de pagina waaraan wordt gewerkt.
De framesets heb ik gedefinieerd in frames.php. In frames.php worden ook alle javascripts ingeladen in de head.
Onderstaand een samenvatting van de file:
Het systeem werkt lekker: Na het klikken op een link in het preview window (frame 'preview') en het compleet laden van de doel pagina, wordt de functie 'readyPreview()' aangeroepen. De functie staat in previewcontroller.js
Deze functie zorgt er voor dat de juiste parameters worden doorgegeven voor het laden van o.a. frame 'browser'.
Tot zover werkt het helemaal naar wens en de functie functioneerd naar behoren. Ik kan bewerkingen uitvoeren en de url van frame 'preview' aansturen vanuit frame 'browser' en vice versa etc. Ook kan ik ajax aanroepen doen die een callback hebben naar javascript functies. Alles werkt zoals bedoeld is.
Totdat ik een bepaalde bewerking uitvoer in frame 'browser' middels een ajax methode. De methode is niet anders van opzet dan de anderen. De callback wordt netjes afgehandeld. Deze bewerking voert geen bewerkingen uit op welk DOM element dan ook.
Wanneer ik nu op een link klik in frame 'preview' (of frame 'browser' die de url veranderd van frame 'preview') en er een nieuwe pagina wordt geladen in frame 'preview' krijg ik een error message en wordt de onload functie niet gevonden.
FireBug geeft aan:
IE7 Developer tool geeft:
Ook Chrome vertikt het om de functie aan te roepen na de desbetreffende ajax bewerking.
Ook bij het intypen van de code 'javascript: readyPreview()' in de adresbalk (top parent niveau: frames.php) krijg ik de foutmelding, waar ik hem voorafgaand niet kreeg (en de functie gewoon werd herkend en uitgevoerd). Ander functies kunnen wel worden aangeroepen.
Als ik mijn DOM inspecteer middels Firebug krijg ik netjes bovenstaande frameset html (dus inclusief onload functies).
Kortom:
- Het verliezen van de onload functie voor frame 'preview' vindt crossbrowser plaats
- Andere functies kunnen gewoon worden aangeroepen (ook functies in previewcontroller.js); script blijft 'intact'.
Heeft iemand een idee wat er hier fout kan gaan waardoor de functie verloren is gegaan?
Ik bouw een CMS dat gebruik maakt van frames.
Frame 'preview' laat een preview van de website zien waar aan wordt gewerkt.
Frame 'browser' laat een browser zien en laadt eigenschappen van de pagina waaraan wordt gewerkt.
De framesets heb ik gedefinieerd in frames.php. In frames.php worden ook alle javascripts ingeladen in de head.
Onderstaand een samenvatting van de file:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> <html> <head> .. <script language="javascript" type="text/javascript" src="bin/javascript/controllers/framecontroller.js"></script> <script language="javascript" type="text/javascript" src="bin/javascript/controllers/previewcontroller.js"></script> .. </head> <frameset name="horizontala" id="structure" rows="*, 25" framespacing="0" frameborder="no" border="0"> <frameset name="horizontal" id="horizontal" cols="*, 25" framespacing="0" frameborder="no" border="0"> <frameset name="vertical" id="vertical" rows="*, 0" framespacing="0" frameborder="no" border="0"> <frame src="../index.php" name="preview" onload="javascript: readyPreview();" > <frame src="control.php" name="control" scrolling="no" onload="javascript: readyControl();"> </frameset> <frame src="browser.php" name="browser" scrolling="no" onload="javascript: readyBrowser();"> </frameset> <frame src="taskbar.php" name="taskbar" scrolling="no" > </frameset> </html> |
Het systeem werkt lekker: Na het klikken op een link in het preview window (frame 'preview') en het compleet laden van de doel pagina, wordt de functie 'readyPreview()' aangeroepen. De functie staat in previewcontroller.js
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| function readyPreview() { current_page_id = frames[0].current_page_id; current_language_id = frames[0].current_language_id; ready_preview = true; if(ready_browser) previewLoaded(); if (initload){ hideTool(); edit = false; } readFrame(0); } |
Deze functie zorgt er voor dat de juiste parameters worden doorgegeven voor het laden van o.a. frame 'browser'.
Tot zover werkt het helemaal naar wens en de functie functioneerd naar behoren. Ik kan bewerkingen uitvoeren en de url van frame 'preview' aansturen vanuit frame 'browser' en vice versa etc. Ook kan ik ajax aanroepen doen die een callback hebben naar javascript functies. Alles werkt zoals bedoeld is.
Totdat ik een bepaalde bewerking uitvoer in frame 'browser' middels een ajax methode. De methode is niet anders van opzet dan de anderen. De callback wordt netjes afgehandeld. Deze bewerking voert geen bewerkingen uit op welk DOM element dan ook.
Wanneer ik nu op een link klik in frame 'preview' (of frame 'browser' die de url veranderd van frame 'preview') en er een nieuwe pagina wordt geladen in frame 'preview' krijg ik een error message en wordt de onload functie niet gevonden.
FireBug geeft aan:
code:
1
2
3
| readyPreview is not a function http://localhost/imagin35/admin/frames.php Line 1 |
IE7 Developer tool geeft:
code:
1
| Object doesn't support this property or method |
Ook Chrome vertikt het om de functie aan te roepen na de desbetreffende ajax bewerking.
Ook bij het intypen van de code 'javascript: readyPreview()' in de adresbalk (top parent niveau: frames.php) krijg ik de foutmelding, waar ik hem voorafgaand niet kreeg (en de functie gewoon werd herkend en uitgevoerd). Ander functies kunnen wel worden aangeroepen.
Als ik mijn DOM inspecteer middels Firebug krijg ik netjes bovenstaande frameset html (dus inclusief onload functies).
Kortom:
- Het verliezen van de onload functie voor frame 'preview' vindt crossbrowser plaats
- Andere functies kunnen gewoon worden aangeroepen (ook functies in previewcontroller.js); script blijft 'intact'.
Heeft iemand een idee wat er hier fout kan gaan waardoor de functie verloren is gegaan?