webForumDet fria alternativet

Förhindra att sidan öppnas i annans frameset

13 svar · 1 565 visningar · startad av Annette

AnnetteMedlem sedan apr. 2001129 inlägg
#1

Vet att det finns ett färdigt javascript som förhindrar att sidan öppnas i någon annan sidas frameset.

Någon som kan dela med sig av detta? :OO

jonneMedlem sedan jan. 20011 154 inlägg
jarvkloMedlem sedan juli 20013 378 inlägg
#3

Tänk bara på att just det där framebreakerscriptet bara funkar under vissa förutsättningar!!!!

Det funkar inte om den sida som "tar in" din sida i ett frameset ligger på en annan domän än den som din sida "bor på" eftersom Javascripts säkerhetsmurar inte tillåter dig att skriva över top.location.href från en sida i en under-frame i det läget!

Exempel på sida med den föreslagna framebreakern: http://member.webforum.nu/2241/framebreaker.html

Exempel på hur den beter sig i en framesetsida på samma domän (framebreakern funkar):
http://member.webforum.nu/2241/framebreakerdemo.html

Exempel på hur det blir när framesetsidan "bor på" en annan domän (framebreakern utslagen):
http://ake.jarvklo.se/htmlexempel/framebreakerdemo.html

För att nu ytterligare spä på eländet, så finns det en cache-relaterad bugg i NN4 (alla versioner) som gör att din sida kan komma fram "skadad" med texten "<h3>Transfer interrupted</h3> inlagd mitt i din kod om du använder "top.location.href=..." - metoden direkt i <head>.
Men det problemet kommer du förbi genom att lägga koden i <body onload="..."> i stället...

Slutresultatet blir hursomhelst att du kan använda

<body onload="if (top.location.href != location.href) { top.location.href=location.href;}">

och vara medveten att det bara funkar mot "inramare" från din egen domän.

/red - exempelfilerna flyttade till nya platser

JojoxxMedlem sedan juni 20004 308 inlägg
#4

...Javascripts säkerhetsmurar inte tillåter dig att skriva över top.location.href från en sida i en under-frame i det läget!

Jodå, det är iofs tillåtet, men den är "write only". Du får alltså skriva till, men inte läsa från. Det hjälper å andra sidan inte speciellt långt i detta läge, men förhoppningsvis gör det sidan mindre intressant att lägga in från en annan domän när det hela tiden genererar ett felmeddelande.

JojoxxMedlem sedan juni 20004 308 inlägg
#5

Funderade lite på det där. Håller man sidan ren från javascript-fel i ev. andra script kan man göra så här (använda felmeddelandet i sig som en trig på att sidan ligger under fel domän):

function winerror(){
	top.location.href = location.href;
	return true;
}
window.onerror = winerror;
if (top.location.href != location.href){
	top.location.href = location.href;
}
jarvkloMedlem sedan juli 20013 378 inlägg
#6

Way to go Jojoxx!

Nu funkar rambrytandet även "korsdomänvis"!

Exempel:
http://ake.jarvklo.net/htmlexempel/framebreakerdemo2.html som försöker rama in http://member.webforum.nu/2241/framebreaker2.html med Jojoxx nya framebreaker.

/red: exempelfilerna flyttade till nya platser

Patrik81Medlem sedan okt. 2001538 inlägg
#7

Snabb fråga

Med det nya scriptet... om någon på SAMMA domän nu försöker länka via ett annat frameset, vad händer då?

MVH Patrik

JojoxxMedlem sedan juni 20004 308 inlägg
#8

Då fungerar det som vanligt, alltså framen kommer att laddas överst.

Patrik81Medlem sedan okt. 2001538 inlägg
#9

Jo, det ser jag ju nu, när jag verkligen läste koden... läste den förut men måste missat det...
Men ok, ny fråga då, om man själv har ett frameset, och vill förhindra att sidorna i detta frameset laddas från någon annans framset då?

*klurar vidare* ;)

MVH Patrik

JojoxxMedlem sedan juni 20004 308 inlägg
#10

Det är bara att göra kollen mot den aktuella frame-setten istället för aktuell sida;

var frameseturl="http://www.domain.se/myframeset.html";
function winerror(){
	top.location.href = frameseturl;
	return true;
}
window.onerror = winerror;
if (top.location.href != frameseturl){
	top.location.href = frameseturl;
}
Patrik81Medlem sedan okt. 2001538 inlägg
#11

Där har vi ett stycke kick-ass kod!!!

MVH Patrik

jarvkloMedlem sedan juli 20013 378 inlägg
#12

Funderade lite till ;)

Följande funkar också, med skillnaden att man inte behöver vara rädd för att ett fel i ett annat script på sidan orsakar en sidomladdning ;)

i <head>:

<script type="text/javascript">
<!--
function breakout(){ 
	try { 
		if (top.location.href != location.href) { 
			throw('breakout NOW!'); 
		}	
	} 
	catch (everything) { 
		top.location.href = location.href; 
	} 
}
//-->
</script>
</head>

i <body>:

<body onload="breakout();">

Osäker på i vilken version av olika läsare som undantagshantering (try/catch) infördes, det funkar i "de moderna" (NN6, IE5+ samt Opera6) webbläsarna ;).

Prova scriptet från frameset-sidan http://ake.jarvklo.se/htmlexempel/framebreakerdemo3.html som laddar in framebrytarexemplet på http://member.webforum.nu/2241/framebreaker3.html

/red Exempelfilerna flyttade till nya platser

draghundMedlem sedan jan. 200279 inlägg
#13

Jag fattar inte!

Försöker använda mig av ovannämdna script , men får det inte att funka, det händer nada, vad gör jag för fel?

jarvkloMedlem sedan juli 20013 378 inlägg
#14

Hmm...
Länk till sidan som inte funkar?

137 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
134 ms — hämta forumlista (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)