Größenanpassung für Iframe - Codebug

If you've problems with unsupported - non official ;-) - functionalities use this forum please.
Hero
Posts: 87
Joined: Thu 16. Dec 2004, 16:14
Location: Düsseldorf
Contact:

Größenanpassung für Iframe - Codebug

Post by Hero »

Hallo zusammen!

Ich habe vor einiger Zeit mit Hilfe Pepe's Coppermine zum laufen bekommen:
http://peperkorn-online.de/iframe-artikelliste.phtml
http://www.gruleiru.de/phpwcms/index.php?bilder

Funktionierte auch wunderbar. Doch jetzt das Problem:
Die Gallery muss auf einen anderen Server umziehen:
http://gruleiru.gr.funpic.de/cpg/index.php

Also ran und URL geändert, aber wenn das mal so einfach wäre.
Mit der neuen Adresse öffnet ich ein ca 100px höhes Fenster.
Durch ausprobieren hab ich rausgefunden:

Code: Select all

<iframe onLoad="iFrameHeight();" 
src="http://www.gruleiru.de/cpg/index.php" 
scrolling="no" scroll="auto" 
id="iframename" name="iframename" 
marginwidth="0" marginheight="0" frameborder="0"
style="width:100%;" height="100">
</iframe>

funktioniert

Code: Select all

<iframe onLoad="iFrameHeight();" 
src="http://gruleiru.de/cpg/index.php" 
scrolling="no" scroll="auto" 
id="iframename" name="iframename" 
marginwidth="0" marginheight="0" frameborder="0"
style="width:100%;" height="100">
</iframe>
aber nicht. Möchte heißen, das Skript verlangt ein http://www.* vor der Adresse.
Da die Adresse http://www.gruleiru.gr.funpic.de/cpg/index.php leider ungültig ist stehe ich vor einem Problem.

Weis jemand die Rätsels Lösung?

Im übrigen: Der Header Code lautet:

Code: Select all

<script language="javascript">
<!--
function iFrameHeight() {
if(document.getElementById && !(document.all)) {
h = document.getElementById('iframename').contentDocument.body.scrollHeight;
document.getElementById('iframename').style.height = h;
}
else if(document.all) {
h = document.frames('iframename').document.body.scrollHeight;
document.all.iframename.style.height = h;
}
}
//-->
</script>
danke euch für die Hilfe!

gruß
Andreas
Pappnase

Post by Pappnase »

sorry aber das script hat bisher noch nie jamand zum laufen bekommen!

:-(
Hero
Posts: 87
Joined: Thu 16. Dec 2004, 16:14
Location: Düsseldorf
Contact:

Post by Hero »

Wenn du auf meiner Seite gucken willst:
Mit de IE klappts wunderbar, Firefox stört sich leider nicht dran.

Dan war ich der erste? :D
pepe
Posts: 3954
Joined: Mon 19. Jan 2004, 13:46

Post by pepe »

Also... ich bin mit der Lösung ganz zufrieden :lol:

Bekomme unter Windows auch deine Site in IE, FireFox und OPERA in einwandfreier Funktion und in voller Höhe angezeigt... was spricht für "private" Sites also gegen das Script :?:

Daß es nicht auf meinem Mist gewachsen ist, sondern nur von mir in den Tips "beschrieben" wird, wurde an dieser Stelle ja schon ausgiebig diskutiert... aber das spricht doch nicht unbedingt gegen das Script, oder :wink:
Hero
Posts: 87
Joined: Thu 16. Dec 2004, 16:14
Location: Düsseldorf
Contact:

Post by Hero »

Komisch, mein Fuchs passt die Größe nicht an!?!
Auf jedenfall such ich noch verzweifelt nach einer lösung, da der umzug eigentlich schon abgeschlossen sein sollte!
User avatar
flip-flop
Moderator
Posts: 8178
Joined: Sat 21. May 2005, 21:25
Location: HAMM (Germany)
Contact:

Post by flip-flop »

:D Mit dem FF funktioniert es bei mir auch nicht.
Aber es gibt eine Lösung für IE und FF. (Opera leider nicht).

Dieses JS-Script kommt in den Head-Bereich der Vorlage für den iFrame:

Code: Select all

<script language="javascript">
<!--
function calcHeight(){
//find the height of the internal page
var the_height= document.getElementById('iframename').contentWindow.document.body.scrollHeight+22; //hier einfach 22HE dazu und es passt ;)

  //change the height of the iframe
  document.getElementById('iframename').height=the_height;
}
//-->
</script>
mit diesem Teil wird der iFrame aufgerufen:

Code: Select all

<iframe onLoad="calcHeight();" 
src="index.php?seitenname" 
scrolling="no" scroll="auto"
id="iframename" name="iframename" 
marginwidth="0" marginheight="0" frameborder="0" 
style="width:600px;" height="1600px">
<p>Ihr Browser kann leider keine eingebetteten Frames anzeigen</p>
</iframe>
Für "seitenname" wird der Name der geframten Seite eingesetzt.
style="width:600px;" bestimmt die Breite des iFrames.
height="1600px" sicherheitshalber für Opera.

So berechnet auch der FF die Größe.
Das Beste daran ist, ein Aufruf einer anderen iFrame-Seite aus diesem iFrame heraus zeigt auch die richtige Größe. Zwar bleibt der Scrollbalken vom Browser bei einem Wechsel aus einem höheren IFrame in einen kleineren auf der alten Höhe stehen, aber der Content-Bereich wird richtig berechnet. (bei FF). Beim IE funktioniert auch der Browser-Scroll richtig.


Das Script kommt nicht von mir, sondern:
http://www.selfphp.de/forum/showthread. ... #post68655


ICH:
Habe das Problem mit sich widerholendem Inhalt auf einer größeren dreisprachigen Seite.
Die ganze Sache wird jetzt über einen hidden-Bereich mit iFrames gelöst. Zwar nicht so toll, aber es funktioniert. Und ich kann innerhab der iFrames verlinken, mit autom. Höhenanpassung ohne in der Navi die Kategorie zu verlassen.

1.2.5 CVS:
Die neu experim. Funktion artikel-id ist klasse und funktioniert auch aber es gibt noch keine relative Verlinkung aus einem Artikel zu einem Artikel ohne die Kategorie zu verlassen. Stell ich mir programmtechnisch auch ziemlich komplex vor, aber das wäre das Sahnehäubchen und würde dieses CMS in eine ganz neue Dimension bringen. (Schätze in einem Jahr würde es auf der c´t -CD mitgeliefert. Siehe JanaServer von Thomas Hauck).

Gruß Knut
>> HowTo | DOCU | FAQ | TEMPLATES/DOCS << ( SITE )
jpsaenz
Posts: 23
Joined: Sun 13. Jun 2004, 14:13

Post by jpsaenz »

hi, die Suchfunktion hat mich zu diesem Thread gebracht, und Flip-Flops Script ist genau das, was ich brauche aber... ich habe immer noch ein kleines Problem: mit iframes möchte ich ein Photoalbum einbetten, welches aber auf einem Subdomain läuft, d.h. ich kann es nur extern einbinden:

Code: Select all

<iframe onLoad="calcHeight();"
src="http://fotos.jupixweb.de/cgi-bin/emAlbum.cgi"
scrolling="no" scroll="auto"
id="fotoframe" name="fotoframe"
marginwidth="0" marginheight="0" frameborder="0"
width="100%" height="700px">
</iframe>


und so funktioniert es nicht. Wenn ich anstatt

Code: Select all

src="http://fotos.jupixweb.de/cgi-bin/emAlbum.cgi"


in dem IFrame ein "interner" Part einbinde, so in der Art:

Code: Select all

src="index.php?irgendetwas"


funktioniert es problemlos. Als Fehlermeldung sagt der IE:

Code: Select all

[...]
Zeile: 18
Zeichen: 1
Fehler: Zugriff verweigert
[...]


Vielleicht könnt Ihr ein Blick darauf werfen: http://www.jupixweb.de/index.php?photos

Wäre toll, wenn jemand helfen könnte...

Danke!
Saludos,
Juan-Pablo

EDIT: ach ja, "Zeile 18" ist die Definition der Höhenvariable:

Code: Select all

var the_height=document.getElementById('fotoframe').contentWindow.document.body.scrollHeight+22;
pepe
Posts: 3954
Joined: Mon 19. Jan 2004, 13:46

Post by pepe »

Hast du mal folgendes versucht:

src="http://www.fotos.jupixweb.de/cgi-bin/emAlbum.cgi"
.
.
.
.

Bei mir klappte das dann... also mit www. :idea:
User avatar
flip-flop
Moderator
Posts: 8178
Joined: Sat 21. May 2005, 21:25
Location: HAMM (Germany)
Contact:

Post by flip-flop »

Hi jpsaenz,

sehr schönes Foto-Script. Ist es die Standard- oder Pro-Ausführung?
:D Ach ja, bei mir funktioniert Dein Album in FF 1.07, IE 5.5 / 6.0. und Opera 7.2. Oder wo lag der Fehler?

Gruß Knut
>> HowTo | DOCU | FAQ | TEMPLATES/DOCS << ( SITE )
jpsaenz
Posts: 23
Joined: Sun 13. Jun 2004, 14:13

Post by jpsaenz »

@pepe: nein, das geht bei mir leider nicht...

@fli-flop: das ist die standard (freeware) Ausführung, ich finde auch, daß das ein klasse Script ist. Leider funktioniert es nicht, Du hast es zwar visualisieren können, weil ich statt height='1' height="700" angegeben habe

Code: Select all

<iframe onLoad="calcHeight();"
[...]
width="100%" height="700px">
</iframe> 
aber die Höhe wird nicht verändert, die bleibt fest bei 700px. (übrigens habe ich es auch ohne jede Höhenangabe versucht, und mit "height="1"", wie im originalbeispiel, es geht auch nicht :-(
chip_rider
Posts: 40
Joined: Wed 2. Nov 2005, 21:41

Post by chip_rider »

...IFRAME...
Dieser Skript funzt sehr gut. :D
Input the IDs of the IFRAMES you wish to dynamically resize to match its content height:
Separate each ID with a comma. Examples: ["myframe1", "myframe2"] or ["myframe"] or [] for none.

Code: Select all


<script type="text/javascript">

/***********************************************
* IFrame SSI script II- © Dynamic Drive DHTML code library (http://www.dynamicdrive.com)
* Visit DynamicDrive.com for hundreds of original DHTML scripts
* This notice must stay intact for legal use
***********************************************/

//Input the IDs of the IFRAMES you wish to dynamically resize to match its content height:
//Separate each ID with a comma. Examples: ["myframe1", "myframe2"] or ["myframe"] or [] for none:
var iframeids=["myframe1", "myframe2", "myframe3", "myframe4", "myframe5"]


//Should script hide iframe from browsers that don't support this script (non IE5+/NS6+ browsers. Recommended):
var iframehide="yes"

var getFFVersion=navigator.userAgent.substring(navigator.userAgent.indexOf("Firefox")).split("/")[1]
var FFextraHeight=getFFVersion>=0.1? 16 : 0 //extra height in px to add to iframe in FireFox 1.0+ browsers



function resizeCaller() {
var dyniframe=new Array()
for (i=0; i<iframeids.length; i++){
if (document.getElementById)
resizeIframe(iframeids[i])
//reveal iframe for lower end browsers? (see var above):
if ((document.all || document.getElementById) && iframehide=="no"){
var tempobj=document.all? document.all[iframeids[i]] : document.getElementById(iframeids[i])
tempobj.style.display="block"
}
}
}

function resizeIframe(frameid){
var currentfr=document.getElementById(frameid)
if (currentfr && !window.opera){
currentfr.style.display="block"
if (currentfr.contentDocument && currentfr.contentDocument.body.offsetHeight) //ns6 syntax
currentfr.height = currentfr.contentDocument.body.offsetHeight+FFextraHeight+45; 
else if (currentfr.Document && currentfr.Document.body.scrollHeight) //ie5+ syntax
currentfr.height = currentfr.Document.body.scrollHeight;
if (currentfr.addEventListener)
currentfr.addEventListener("load", readjustIframe, false)
else if (currentfr.attachEvent){
currentfr.detachEvent("onload", readjustIframe) // Bug fix line
currentfr.attachEvent("onload", readjustIframe)
}
}
}

function readjustIframe(loadevt) {
var crossevt=(window.event)? event : loadevt
var iframeroot=(crossevt.currentTarget)? crossevt.currentTarget : crossevt.srcElement
if (iframeroot)
resizeIframe(iframeroot.id);
}

function loadintoIframe(iframeid, url){
if (document.getElementById)
document.getElementById(iframeid).src=url
}

if (window.addEventListener)
window.addEventListener("load", resizeCaller, false)
else if (window.attachEvent)
window.attachEvent("onload", resizeCaller)
else
window.onload=resizeCaller

</script>

Aufruf des Skripts mit <iframe id="...." ....
Padding Verbesserung für: IE,FF,NS,...

Code: Select all

<iframe id="myframe1" src="...../index.php" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" vspace="0" hspace="0" style="overflow:visible; width:600; display:none"></iframe>

MFG
chip_rider
jpsaenz
Posts: 23
Joined: Sun 13. Jun 2004, 14:13

Post by jpsaenz »

irgenwie scheint bei mir nicht richtig zu Laufen, ich bekomme immer "Zugriff Verweigert" wenn ich in dem IFrame eine externe Seite laden möchte - bei internen Verweisen geht alles ohne Probleme... Ist nicht wirklich tragisch, aber sehr ärgerlich...
User avatar
pico
Posts: 2595
Joined: Wed 28. Jul 2004, 18:04
Location: Frankfurt/M Germany
Contact:

Post by pico »

Hi

if your Content for the iFrame is on another URL, check that in your conf.inc.php

Code: Select all

$phpwcms["allow_remote_URL"]  = 1;        //0 = no remote URL in {PHP:...} replacement tag allowed, 1 = allowed
ist set proper!

also that your Host allow remute URL's
Lieber Gott gib mir Geduld - ABER BEEIL DICH
Horst - find me at Musiker-Board
jpsaenz
Posts: 23
Joined: Sun 13. Jun 2004, 14:13

Post by jpsaenz »

@all: danke für Eure Antworten - klappt leider immer noch nicht...

bin ratlos...

Saludos,
Juan-Pablo
User avatar
flip-flop
Moderator
Posts: 8178
Joined: Sat 21. May 2005, 21:25
Location: HAMM (Germany)
Contact:

Post by flip-flop »

Hi,
ich würde die Höhe auf die größtnötige Ausdehnung einstellen. Die "Usability" geht dadurch nicht verloren. Der Programmierer einer Seite macht sich häufig Gedanken um Dinge, die der normale User überhaupt nicht bemerkt.
Nicht so toll finde ich dagegen, dass es in dem Foto-Album keinen "Backlink" gibt. Das ist nervig beim Picken von einzelnen Bildern.

Gruß Knut
>> HowTo | DOCU | FAQ | TEMPLATES/DOCS << ( SITE )
Post Reply