Ik heb een script geschreven dat naar de top van een framestructuur gaat (het allerhoogst liggende frame) en dan alle frames afzoekt tot een frame met de opgegeven naam wordt gevonden.
Het script zelf werkt prima. Helaas heb ik ondervonden, dat wanneer ik het script gebruik op sites die op meerdere servers staan.
Ter verduidelijking: Er is bijv een site die op server 1 staat. Die heeft o.a. een content en een navigatieframe. Klik je in het navigatieframe op een bepaalde optie, dan wordt een module, draaiend op server 2, in het content frame geladen. De module bevat ook weer frames, die weer frames bevatten, etc. In die module staat deze functie. Wil ik dan naar de top van ALLE frames vanuit die module, dan gaat dat goed zolang ik binnen de framesets van de module blijf, maar probeer ik bij frames te komen die van de hoofdsite komen, en dus op server 1 staan, dan krijg ik een "Access denied" Javscript foutmelding.
Ik vermoed dat dit een security issue is, het lijkt me vrij logisch dat je niet zomaar in frames mag gaan neuzen die niet bij je eigen site (=domein) horen. MAAR het probleem is dat ik dit niet af kan vangen. Ik HOEF helemaal niet bij de frames van de hoofdsite, maar ik zou niet weten hoe ik het scriptje zo kan schrijven dat hij stopt wanneer ik anders een error zou krijgen (try catch geprobeerd maar dat is me niet gelukt).
Het scriptje (wordt aangeroepen met bijv: findFrame("frame_naam") ):
Overigens werkt het in sommige browsers wel. Bijv MSIE 5.5 en 6 en NS 4.7 pikken het, volgens mij alle andere browsers niet. Security bugje?
Anyway, kan iemand me vertellen hoe ik de foutmelding zo af kan vangen dat het script stopt bij het hoogste frame van de huidige server?
Voor de duidelijkheid: frame.location opvragen gaat niet, dan krijg je ook al meteen een "Access violation".
Het script zelf werkt prima. Helaas heb ik ondervonden, dat wanneer ik het script gebruik op sites die op meerdere servers staan.
Ter verduidelijking: Er is bijv een site die op server 1 staat. Die heeft o.a. een content en een navigatieframe. Klik je in het navigatieframe op een bepaalde optie, dan wordt een module, draaiend op server 2, in het content frame geladen. De module bevat ook weer frames, die weer frames bevatten, etc. In die module staat deze functie. Wil ik dan naar de top van ALLE frames vanuit die module, dan gaat dat goed zolang ik binnen de framesets van de module blijf, maar probeer ik bij frames te komen die van de hoofdsite komen, en dus op server 1 staan, dan krijg ik een "Access denied" Javscript foutmelding.
Ik vermoed dat dit een security issue is, het lijkt me vrij logisch dat je niet zomaar in frames mag gaan neuzen die niet bij je eigen site (=domein) horen. MAAR het probleem is dat ik dit niet af kan vangen. Ik HOEF helemaal niet bij de frames van de hoofdsite, maar ik zou niet weten hoe ik het scriptje zo kan schrijven dat hij stopt wanneer ik anders een error zou krijgen (try catch geprobeerd maar dat is me niet gelukt).
Het scriptje (wordt aangeroepen met bijv: findFrame("frame_naam") ):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| function findFrame(framename) {
if (mtBrowserVersion<5 && document.layers!=null) { // NS < 6
var f = mtElement(framename);
if (f!=null) {
return f;
}
}
var p = null;
var error = false;
if (window!=null) if (window.parent!=null) p = window.parent;
while (p.parent!=null && p.parent!=p) {
p = p.parent;
}
var f = null;
f = doFind(p,framename);
return f;
}
function doFind(p,framename) {
var f=null;
for(var i=0; i<p.frames.length; i++) {
if (p.frames[i].name==framename) {
f = p.frames[i];
return f;
}
}
if (f==null) {
for(var i=0; i<p.frames.length; i++) {
f = doFind(p.frames[i],framename);
if (f!=null) return f;
}
}
} |
Overigens werkt het in sommige browsers wel. Bijv MSIE 5.5 en 6 en NS 4.7 pikken het, volgens mij alle andere browsers niet. Security bugje?
Anyway, kan iemand me vertellen hoe ik de foutmelding zo af kan vangen dat het script stopt bij het hoogste frame van de huidige server?
Voor de duidelijkheid: frame.location opvragen gaat niet, dan krijg je ook al meteen een "Access violation".
Bnet pindle#2913