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
13 svar · 1 565 visningar · startad av Annette
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
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
...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.
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;
}
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
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
Då fungerar det som vanligt, alltså framen kommer att laddas överst.
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
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;
}
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
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?
Hmm...
Länk till sidan som inte funkar?