3 Stimmen

Mobile Safari und das iFrame src Attribut

Ich versuche, das 'src'-Attribut für ein iFrame festzulegen. Es funktioniert großartig auf FireFox und Internet Explorer. Wenn ich jedoch auf dem iPad Mobile Safari teste, ändert sich das 'src'-Attribut nicht.

Ich habe ein iFrame, dessen 'src'-Attribut im HTML festgelegt ist.

Später habe ich einige Codezeilen, die versuchen, das src zu ändern

var iFrame0 = YAHOO.util.Dom.get('iFrame0');
YAHOO.util.Event.addListener(iFrame0, 'load', function() { alert('test'); });
MyWebService.GetDynamicUrl('someparam', function(url) {
  iFrame0.src = url;
});

Nicht nur, dass das Ereignis nicht ausgelöst wird, sondern auch der Inhalt der URL ändert sich nicht. In meinen Tests habe ich festgestellt, dass der Wert iFrame0.src auf die neu übergebene URL geändert wird, aber der Inhalt auf der Seite ändert sich nicht.

Ich verwende YUI, aber um das als potenzielles Problem auszuschließen, habe ich in meinen Tests auch versucht, direkt auf das iFrame zuzugreifen über:

document.getElementById('iFrame0').attribute("src") = '..../newurl.gif';

Funktioniert immer noch nicht.

3voto

Scott Dietrich Punkte 676

Am Ende habe ich das Problem gelöst, indem ich das iframe dynamisch erstellt und es an den DOM angehängt habe. Außerdem habe ich einen Zeitstempel zu den id- und src-Attributen hinzugefügt, um sicherzustellen, dass kein Caching durchgeführt wird (obwohl ich mir nicht sicher bin, ob das wirklich notwendig ist).

var elIFrame = document.createElement("iframe");
var dt = new Date();
elIFrame.src = APP_IMAGEPATH + "/loading.gif?dt=" + dt.getTime();
elIFrame.id = 'newCard2' + dt.getTime();
elIFrame.frameBorder = 0;
elIFrame.scrolling = "no";
elIFrame.style.width = "500px";
elIFrame.style.height = "1.8em";
YAHOO.util.Dom.insertAfter(elIFrame, this.pre + "cardMask");

0voto

johnmdonahue Punkte 653

Sind Sie sicher, dass die Variable iFrame0 tatsächlich auf das iFrame-DOM-Objekt zeigt und nicht auf ein leeres Objekt oder ein anderes Element mit derselben ID (zum Beispiel ein DIV)? Vielleicht könnten Sie überprüfen, ob die ursprüngliche src das ist, was Sie erwarten (zum Beispiel '.../loading.gif').

Versuchen Sie auf das Frame mit folgendem zuzugreifen:

var frameObj = document.frames ? document.frames['iFrame0'] : document.getElementById('iFrame0'),
    frameWin = frameObj.contentWindow || frameObj;

Und versuchen Sie dann, die src zu ändern:

frameWin.src = '..../neueurl.gif';

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X