tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von CPoly
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
452
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    sten76 sten76 ist offline Grünschnabel
    Registriert seit
    Sep 2011
    Beiträge
    4
    Hallole,

    ich möchte gerne ein Iframe in meine Webseite einbinden. Ich verwalte sowohl die Webseite des Iframe als auch die Webseite in das es eingebunden werden soll.
    Jetzt möchte ich gerne von dem Iframe aus die Höhe senden .. an die übergeordnete Webseite (in der das Iframe eingebunden ist). Problematik dabei, das Iframe liegt auf einem anderen Server (also anderen Domain).

    Geht das..?
    Habe schon alles mögliche probiert scheitere jedoch an der SOP.

    Jetzt habe ich gegoogled und grade eine Möglichkeit via postMessages gefunden..
    sowie ich das sehe geht das nur mit ab IE8 und den neuen Firefoxen...oder?

    Das Ganze ist ein wenig kompliziert.
    Vorliegend ist ein CMS das auf einem Server a läuft, in diesem wird ein Formular eingebunden, das wiederum auf einem anderen Server b läuft und dieses Formular sendet Daten an einen dritten Server c (auf dem eine DB läuft).

    Mir ist nix anderes eingefallen als ne Möglichkeit mit einem Iframe (vorerst).

    ..Warum alles auf verschiedenen Servern läuft - hat technische Gründe. Leider habe ich kein PHP zur Verfügung daher mein Versuch das Ganze mit postMessages..

    Die Frage ist, gibt es ne andere Möglichkeit.. oder habt ihr Tipps für mich..
    Geändert von sten76 (18.12.11 um 14:46 Uhr) Grund: griesgrämiger Philister wg. kleinschreiben....
     

  2. #2
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Bitte achte in Zukunft auf Groß- und Kleinschreibung.

    postMessage ist genau das, was du suchst. Die Browseruntersützung für solche Features kannst du auf dieser Seite hervorragend herausfinden: http://caniuse.com/#search=postmessage

    Falls dir IE8 nicht reicht, musst du dir etwas anderes suchen.
    Auch wenn es verschiedene Server sind, hast du die Möglichkeit alle über die gleiche Domain, aber mit verschiedenen Subdomains laufen zu lassen? Also a.example.com, b.example.com und c.example.com? Dann gäbe es noch eine weitere Möglichkeit über das IFrame zu kommunizieren, in dem du die document.domain Eigenschaft überschreibst.

    Eine dritte Variante mit dem IFrame wäre "Hash polling". Aber das hat dann auch Nachteile. http://softwareas.com/cross-domain-c...n-with-iframes


    Also am Besten wäre postMessage, aber falls IE < 8 wichtig ist, dann wäre es gut das über Subdomains zu machen. Das sollte ja mittels entsprechender DNS Einträge kein Problem sein.
    sten76 bedankt sich. 

  3. #3
    sten76 sten76 ist offline Grünschnabel
    Registriert seit
    Sep 2011
    Beiträge
    4
    danke für die Tipps.. ich schau mal welches Lösung realisiere. für weitere Beiträge bin ich natürlich dankbar..
     

  4. #4
    sten76 sten76 ist offline Grünschnabel
    Registriert seit
    Sep 2011
    Beiträge
    4
    So meine gefundene* Realisierung mit kleineren Anpassungen, testweise via Iframe.
    Im Code des Iframe (eingebunde Webseite):

    PHP-Code:
    //js-datei:
    function iframeheight()
    {
        function 
    postSize(e){  
          var 
    target parent.postMessage parent : (parent.document.postMessage ?      
          
    parent.document undefined);  
          if (
    typeof target != "undefined" && document.body.offsetHeight)  
           
    target.postMessage(document.getElementById("eingabe").offsetHeight"*");  
          
    //change this star to your domain for more security  
        
    }  
         if (
    window.addEventListener){  
              
    window.addEventListener("load"postSizefalse);  
            } else {  
              
    window.attachEvent("load"postSize);//for ie  
            
    }  

    HTML-Code:
    <form name="eingabe" id="eingabe" action="{$URL}" method="get">
    ..
    </form>//des eingebundene formular
    
    <script type="text/javascript">iframeheight();</script>
    ------
    Seite bei der das Iframe eingebunden wird:

    HTML-Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <title>New Web Project</title>
            <script type="text/javascript" src="jquery.js" language="JavaScript"></script>
        </head>
        <body style="background-color: orange">
           <h1 style="color: white">New Web Project Page</h1>
    	   <script type="text/javascript">
    			$(function() {
    				  
    				var ua = $.browser;  
    			 	if ( ua.msie && ua.version.slice(0,3) == ("7.0") || ua.msie && ua.version.slice(0,3) == ("6.0")) 
    			 	{  
    			 	 var b = $("#iframe").remove().empty();
    			     var c = '<iframe src="http://localhost/test/test.xyz" style="width:525px; height:870px" id="iframe" frameborder="no" scrolling="no"></iframe>';  
    			     $('#iframe_holder').append(c); //nix anderes als wenn IE7 dann bei div anhängen...
    				}
    			}) 
    			 
    			function receiveSize(e)
    			{ //alert(e.data);
    				if (e.origin === "http://localhost") 
    					$("#iframe").attr('height', e.data);
    				var b = $("#iframe").height() + 20;
    				$("#iframe").attr('height', b); 
    			}  
    			  
    			if (window.addEventListener){  
    			        window.addEventListener("message", receiveSize,false);  
    			    } else {  
    			        window.attachEvent("onmessage", receiveSize);
    			    }  
    		</script>      
    
    		<iframe id="iframe" style="background-color:white; color: black; padding-left:10px" src="http://localhost/test/test.xyz" frameborder="no" width="540" height="540" scrolling="no"></iframe>
    		<div id="iframe_holder"></div>  
       	</body>     
    </html>
    zum Testen (wg zwei unterschiedliche Domains) habe ich zwei Webserver laufen.
    Den anderen auf port:9090 (die seite die das frame aufruft)

    Jetzt hab ich das Problem das Firefox die Höhe des Iframes anpasst aber der IE8 nicht...
    wenn ich das alert in der Funktion receiveSize(e) ausführe Kommtarzeichen weg)
    dann führt der Firefox das alert einwandfrei aus und gibt mir die Höhe in px , der IE8 nicht!
    heißt der IE8 führt die Funktion nicht mal aus. Sollte doch gehen bei IE8 oder?

    hab ich etwas übersehen?

    ps. achja Bei alle anderen Browsern.. Opera, Safari funktioniert das Ganze natürlich auch...
    *wenn ich nur die Seite wieder finden würde mit dem Snipset..
    Geändert von sten76 (21.12.11 um 09:29 Uhr)
     

  5. #5
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Im IE wird kein event Objekt übergeben, sondern du musst auf window.event zurückgreifen. Das hat aber mit dem postMessage nichts zu tun, sondern ist eine bekannte IE Eigenschaft.

    Code javascript:
    1
    2
    3
    4
    5
    6
    
    function receiveSize(e)
    {
        e = e || window.event;
        
        //Dein Code
    }
     

Ähnliche Themen

  1. C++ Client Server Kommunikation
    Von july im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 25.05.11, 17:42
  2. Kommunikation swf Banner (XML)auf AD-Server
    Von mahle im Forum Flash Plattform
    Antworten: 1
    Letzter Beitrag: 18.07.10, 14:31
  3. Kommunikation: Server -> Client
    Von Maik20 im Forum PHP
    Antworten: 2
    Letzter Beitrag: 18.01.09, 11:13
  4. Client Server Kommunikation
    Von nathaniells freak im Forum Coders Talk
    Antworten: 0
    Letzter Beitrag: 12.02.08, 14:50
  5. TCP Client-Server Kommunikation ?
    Von winx79 im Forum .NET Web und Kommunikation
    Antworten: 2
    Letzter Beitrag: 26.05.06, 10:54