webForumDet fria alternativet

Förhindra att sidan öppnas i annans frameset

JavaScript

13 svar · 1 565 visningar · startad av Annette

Medlem sedan apr. 2001129 inlägg
Frågan#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

Medlem sedan jan. 20011 154 inlägg
Medlem 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

Medlem 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.

Medlem 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;
}
Medlem 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

Medlem 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

Medlem sedan juni 20004 308 inlägg
#8

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

Medlem 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

Medlem 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;
}
Medlem sedan okt. 2001538 inlägg
#11

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

MVH Patrik

Medlem 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

Medlem 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?

Medlem sedan juli 20013 378 inlägg
#14

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

258 ms totalt · 4 externa anrop · v20260731065814-full.868a69e5
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)