Перезагрузите iframe src / location с новым URL, не работающим в Safari - PullRequest
7 голосов
/ 10 ноября 2011

У меня есть страница, которая изначально загружается только с формой внутри iframe, что-то вроде этого:

<iframe id="oIframe" ...src='somePage>' <form ... /> </iframe>

Когда вы нажимаете кнопку в форме, вызывается некоторый JavaScriptкоторый создает URL, а затем я хочу сделать следующее:

frame.src = 'somePage?listId=1';

Это работает в IE, чтобы "перезагрузить" фрейм с новым содержимым.Однако в Safari это не работает.

У меня есть jQuery, но я не хочу заменять существующий iframe, потому что к нему присоединены события.Я также не могу изменить идентификатор iframe, потому что на него ссылаются во всем приложении.

Я видел некоторые похожие проблемы, но нет решений, которые, кажется, хорошо работают для моей конкретной проблемы.

Любойпомощь, которую может оказать каждый, была бы великолепна!

Ответы [ 5 ]

5 голосов
/ 01 февраля 2013

Так что ответ очень прост:1. поместите <div id="container"> </div> на свою страницу2. когда требуется перезагрузка, используйте следующий jQuery:

$("#container").empty();
$("#container").append("<iframe src='" + url + "' />");

и все.Конечно, есть более элегантный способ создания DOM с помощью jQuery, но это дает идею «обновить» iframe.Работает в FF18, CH24, IE9, O12 (ну, это jQuery, поэтому он будет работать почти всегда:)

5 голосов
/ 10 ноября 2011

Некоторые браузеры не используют «src» при вызове объекта javascript непосредственно из иерархии javascript, а другие используют «location» или «href» вместо «src» для изменения URL.Вы должны попробовать эти два метода, чтобы обновить свой iframe с новым URL-адресом.

Чтобы предотвратить кеш браузера, добавьте псевдослучайную строку, такую ​​как число и временную метку, в URL, чтобы предотвратить кеширование.Например, добавьте «new Date (). GetTime ()» к вашему URL.

Некоторые примеры вызова:

document.getElementById(iframeId).src = url;

или

window.frames[iframeName].location = url;  

Я рекомендую первыйопция с использованием document.getElementById

Также вы можете заставить iframe перезагрузить страницу, используя

document.getElementById(iframeId).reload(true);
3 голосов
/ 09 мая 2012

Я нашел лучшее решение (хотя и не особо красноречивое) для этого, используя jQuery.ajax:

jQuery.ajax({
   type: 'GET',
   url: "/somePage?someparms",
   success: function() {
      frameObj.src = "/somePage?someparms";
   }
});

Это заставляет DOM считываться в объекте frame и перезагружает его, когда сервер готовответить.

0 голосов
/ 11 ноября 2011

Что ж, я смог найти то, что кажется приемлемым решением - это работа в процессе, но в основном это то, что я в итоге сделал:

var myFrame = document.getElementById('frame'); // get frame  
myFrame.src = url; // set src attribute of original frame  
var originalId = myFrame.id; // retain the original id of the frame  
var newFrameId = myFrame.id + new Date().getTime(); // create a new id  
var newFrame = "<iframe id=\"" + newFrameId + "\"/>"; // iframe string w/ new id  
myFrameParent = myFrame.parentElement; // find parent of original iframe  
myFrameParent.innerHTML = newFrame; // update innerHTML of parent  
document.getElementById(newFrameId).id = originalId; // change id back
0 голосов
/ 10 ноября 2011

Попробуйте это

form.setAttribute('src', 'somePage?listId=1');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...