Frames kontrollieren mit Prototype & IE

andrutz

Mitglied
Hallo liebe Tut-Gemeinde,

ich habe ein kleines Problem mit Iframes und dessen Kontrolle über den Internet Explorer.
Als Javascript Framework benutze ich Prototype.

Also ich habe ein Html Dokument, darin liegt ein Iframe
HTML:
<html>
.....
<iframe id="myIFrameId" name="myIFrameName"></iframe>
.....
</html>

Ich habe gelsen, dass ich mit folgendem JS Code auf Iframes mit Prototype zugreifen kann
Code:
Element.addMethods('iframe', {
	document: function(element) {
	  element = $(element);
	  if (element.contentWindow)
	      return element.contentWindow.document;
	  else if (element.contentDocument)
	      return element.contentDocument;
	  else
	      return null;
	},
	$: function(element, frameElement) {
	  element = $(element);
	  var frameDocument = element.document();
	  if (arguments.length > 2) {
	      for (var i = 1, frameElements = [], length = arguments.length; i < length; i++)
	          frameElements.push(element.$(arguments[i]));
	      return frameElements;
	  }
	  if (Object.isString(frameElement))
	      frameElement = frameDocument.getElementById(frameElement);
	  return frameElement || element;
	}
});

Nun kann ich im Mozilla folgendermaßen zb. Inhalt einfügen:
Code:
$('myIFrameId').document.body.innerHTML = "<div id='wrapper'></div>";
Element.insert($('myIFrameId').$('wrapper'), {top: 'Ich bin Inhalt.'});

So weit so gut, als ich das im IE getestet habe, hat sich das Ding komplett quer gestellt.
Die einzige Möglichkeit, wie ich dieses Iframe überhaupt beschreiben kann ist folgende:
Code:
window.myIFrameName.document.body.innerHTML = '<div id="wrapper"></div>';
//ich kann zwar auf diese Art und Weise etwas hinein schreiben,
window.myIFrameName.document.getElementById('wrapper').innerHTML = "Ich bin Inhalt."

Aber im Internet Explorer hier auf irgend eine Weise Prototype Funktionen einzusetzen.. da bin ich grad ein bisschen ratlos, wie das gehen soll.

Hat jemand ne Idee?
 
Moin,

dieses Hilfsmittel da(diesen JS-Code, den du gefunden hast), benötigst du garnicht.

Das $-Utility erwartet ja entweder eine Id oder aber ein Objekt, gebe ihm ein Objekt, und wechsele dadurch den Scope, in dem du das Ganze ausführst ...vom Elternfenster zum iFrame:

Code:
$(window.myIFrameName.$('wrapper')).insert({top: 'es klappt'});

Vorraussetzung dabei ist natürlich, dass auch in dem iFrame prototype.js eingebunden ist.
 
Vielen Dank, super Sache.

Für jemanden, der mit dynamisch gefüllten iFrames arbeiten möchte ist auch folgende Codepasage recht ineressant, mit welcher man (auch im IE ;) ) externe Javascript Dateien einbinden / nachladen kann

Code:
myFuncName = function(scriptPath)
{
	scriptNode = this.iFrameIE.document.createElement('script');
	scriptNode.setAttribute('type', 'text/javascript');
	scriptNode.setAttribute('src', scriptPath);
	this.iFrameIE.document.getElementsByTagName('head')[0].appendChild(scriptNode);
}

Vielen Dank für die Hilfe.
 

Neue Beiträge

Zurück