Атрибут Mobile Safari и iFrame src - PullRequest
3 голосов
/ 23 июня 2011

Я пытаюсь установить атрибут 'src' для iFrame. Отлично работает на FireFox и Internet Explorer. Однако при тестировании мобильного iPad-сафари изменение атрибута 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 не меняется. В своем тестировании я отметил, что значение iFrame0.src действительно изменяется на недавно переданный URL, но содержимое на странице не меняется.

Я использую YUI, однако, чтобы устранить это как потенциальную проблему в моем тестировании, я также попытался получить прямой доступ к iFrame через:

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

Все еще не работает.

Ответы [ 2 ]

3 голосов
/ 29 июня 2011

В конце концов я решил эту проблему, динамически создав 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 голосов
/ 28 июня 2011

Вы уверены, что переменная iFrame0 фактически указывает объект DOM iFrame, а не какой-либо пустой объект или другой элемент, использующий тот же идентификатор (например, DIV)?Возможно, вы могли бы попытаться проверить исходный src, чтобы увидеть, соответствует ли он ожидаемому (то есть '... / loading.gif').

Попробуйте получить доступ к фрейму с помощью следующего:

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

А затем попробуйте изменить его src:

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