Mobile Safari和iFrame的src属性

3

我正在尝试为一个iFrame设置'src'属性。在FireFox和Internet Explorer上运行良好。然而,在iPad移动Safari测试时,更改'src'属性没有任何作用。

我有一个iFrame,它的'src'属性在HTML中设置。

<iframe id="iFrame0" style="margin: 0px; overflow: hidden; padding: 0px; height:80px; width:500px" src='.../loading.gif' frameborder="0"></iframe>

稍后我有一些代码尝试更改src。
var iFrame0 = YAHOO.util.Dom.get('iFrame0');
YAHOO.util.Event.addListener(iFrame0, 'load', function() { alert('test'); });
MyWebService.GetDynamicUrl('someparam', function(url) {
  iFrame0.src = url;
});

事件没有触发,URL的内容也没有改变。在我的测试中,我注意到的值确实已更改为新传入的URL,但页面上的内容并未更改。

我正在使用YUI,然而,为了排除测试中潜在的问题,我还尝试直接访问iFrame:

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

仍然不起作用。

你尝试过使用contentWindow.location = url或setAttribute("src", url)进行修改吗? - johnmdonahue
我尝试了 setAttribute(包括 YUI 和 DOM),但没有用。我还尝试了 contentWindow.location 和 contentWindow.location.href,但也没用。 - Scott Dietrich
我一直在尝试其他方法... 我尝试根据这里提到的更改'name'属性:链接。我还尝试了这样设置:window.frames[0].location = '....newurl.gif'。但仍然没有帮助。 - Scott Dietrich
这对我来说真的很奇怪。我从未遇到过这个问题,并且经常在移动Safari上动态注入和修改iFrame的src。你可以发一下你的代码链接或提供一个jsfiddle链接吗?我很好奇这里发生了什么。你尝试在其他iOS版本上运行它了吗?3.2移动Safari肯定有漏洞。它在iPhone或iOS > 3.2上工作吗? - johnmdonahue
我最近在iOS > 4.0的iPhone上进行了测试,但仍然无法正常工作。不幸的是,该网站位于内部网络中,因此我无法提供链接。我会继续努力 :) - Scott Dietrich
2个回答

3
最终,我通过动态创建iframe并将其附加到DOM来解决了这个问题。我还在id和src属性中添加了时间戳,以确保不进行缓存(尽管我不确定是否真的有必要)。
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");

0

你确定变量iFrame0实际上指向iFrame DOM对象,而不是一些空对象或其他使用相同ID的元素(例如DIV)吗?也许你可以尝试检查初始src以查看它是否符合你的预期(即“.../loading.gif”)。

尝试使用以下方式访问框架:

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

然后尝试修改它的src:

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

我非常确定我有正确的iframe元素。我已经在我的JavaScript中放置了警报语句。奇怪的是,当我执行alert(iFrame0.src);时,它会给我应该存在的URL(但不会在iFrame中显示)。 - Scott Dietrich
我想知道是否有人对于是否考虑切换到object元素有意见。 - Scott Dietrich
@Scott 我看到了…非常奇怪!我想知道它是否是一个重绘问题?您尝试过切换iFrame的display属性,以查看是否可以强制进行重绘吗?此外,通过Fiddler或Charles代理iPad可能有助于查看是否实际上为替换的URL发出了请求。祝好运! - johnmdonahue

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接