Я хотел бы перезагрузить с <iframe>
помощью JavaScript. Лучший способ, который я нашел до сих пор, это установить src
атрибут iframe для себя, но это не очень чисто. Любые идеи?
javascript
iframe
caffo
источник
источник
src
атрибута на себя не является чистой? Кажется, это единственное решение, которое работает в разных браузерах и доменахsrc
атрибута на себя вызывает проблемы, если у вас есть ссылка в другом месте, которая нацелена на<iframe>
. Затем рамка покажет начальную страницу в соответствии с первоначальным дизайном.Ответы:
будьте осторожны, в Firefox
window.frames[]
нельзя индексировать по id, но по имени или индексуисточник
frames[1].location.href.reload()
иwindow.frames['some_frame_id'].location.href.reload()
также может быть использованЭто перезагрузит
iframe
, даже через домены! Протестировано с IE7 / 8, Firefox и Chrome.источник
document.getElementById('iframeid').src += '';
также работает: jsfiddle.net/Daniel_Hug/dWm5kreload
но это разрешено.http://example.com/#something
), это не перезагрузит кадр. Я использовал подход добавления одноразового параметра запроса, например,?v2
к URL-адресу до хэша.При использовании jQuery это работает:
Я надеюсь, что это не слишком уродливо для stackoverflow.
источник
var iframe = document.getElementById("your_iframe"); iframe.src = src;
var iframe = document.getElementById("your_iframe"); iframe.src = iframe.src;
Добавьте пустое место и перезагрузите iFrame автоматически.
источник
источник
Из-за той же политики происхождения это не будет работать при изменении iframe, указывающего на другой домен. Если вы можете настроить таргетинг на новые браузеры, рассмотрите возможность использования обмена документами в формате HTML5 . Вы просматриваете браузеры, поддерживающие эту функцию, здесь: http://caniuse.com/#feat=x-doc-messaging .
Если вы не можете использовать функциональность HTML5, то вы можете следовать рекомендациям, изложенным здесь: http://softwareas.com/cross-domain-communication-with-iframes . Эта запись в блоге также помогает определить проблему.
источник
Я только что столкнулся с этим в Chrome, и единственное, что сработало, это удаление и замена iframe. Пример:
Довольно просто, не охвачено другими ответами.
источник
для нового URL
Метод assign () загружает новый документ.
перезарядка
Метод reload () используется для перезагрузки текущего документа.
источник
Простая замена
src
атрибута элемента iframe в моем случае не была удовлетворительной, потому что можно было увидеть старое содержимое, пока не загрузится новая страница. Это работает лучше, если вы хотите дать мгновенную визуальную обратную связь:источник
Уточнение поста Яджры ... Мне нравится эта мысль, но я ненавижу идею обнаружения браузера.
Я предпочитаю ppk использовать обнаружение объектов вместо обнаружения в браузере ( http://www.quirksmode.org/js/support.html ), потому что тогда вы фактически тестируете возможности браузера и действуете соответственно, а не на что, на ваш взгляд, способен браузер в то время. Кроме того, не требуется так много разборов паролей идентификатора браузера, и не исключаются браузеры с отличными возможностями, о которых вы ничего не знаете.
Итак, вместо того, чтобы смотреть на navigator.AppName, почему бы не сделать что-то подобное, на самом деле тестирование элементов, которые вы используете? (Вы можете использовать блоки try {}, если хотите стать еще интереснее, но у меня это получилось.)
Таким образом, вы можете попробовать столько разных перестановок, сколько вам нужно или необходимо, не вызывая ошибок javascript, и сделать что-то разумное, если ничего не помогает. Это немного больше работы для проверки ваших объектов перед их использованием, но, IMO, делает для лучшего и более отказоустойчивого кода.
У меня работали в IE8, Firefox (15.0.1), Chrome (21.0.1180.89 m) и Opera (12.0.2) в Windows.
Возможно, я мог бы сделать еще лучше, фактически протестировав функцию перезагрузки, но мне этого сейчас достаточно. :)
источник
Теперь, чтобы сделать эту работу на Chrome 66, попробуйте это:
источник
В IE8 с использованием .Net установка в
iframe.src
первый раз в порядке, но установкаiframe.src
во второй раз не вызывает повышениеpage_load
страницы iframed. Чтобы решить это я использовалiframe.contentDocument.location.href = "NewUrl.htm"
.Узнайте об этом, когда используете jQuery ThickBox и пытаетесь открыть ту же страницу в iframe. Тогда он просто показал предыдущую страницу, которая была открыта.
источник
Используйте перезагрузку для IE и установите src для других браузеров. (перезагрузка не работает на FF) протестирована на IE 7,8,9 и Firefox
источник
Если вы используете Jquery, то есть одна строка кода.
и если вы работаете с тем же родителем, то
источник
Если все вышеперечисленное не работает для вас:
Это почему-то обновило мой iframe вместо всего скрипта. Может быть, потому что он помещен в сам фрейм, в то время как все эти решения getElemntById работают, когда вы пытаетесь обновить фрейм из другого фрейма?
Или я не понимаю этого полностью и говорю бессмысленно, в любом случае это работало для меня как очарование :)
источник
Вы рассматривали добавление к URL бессмысленным параметром строки запроса?
Это не будет видно, и если вы знаете, что параметр безопасен, то все должно быть в порядке.
источник
Другое решение
источник
var url = ifr.src; ifr.src = null; ifr.src = url;
источник
Если вы перепробовали все другие предложения и не смогли заставить их работать (как я не смог), вот что вы можете попробовать, что может быть полезно.
HTML
JS
Сначала я решил попытаться сэкономить время с помощью RWD и кросс-браузерного тестирования. Я хотел создать быструю страницу, содержащую кучу фреймов, организованных в группы, которые я буду показывать / скрывать по желанию. По логике вы хотели бы иметь возможность легко и быстро обновить любой данный кадр.
Я должен отметить, что проект, над которым я сейчас работаю, который используется на этом тестовом стенде, это одностраничный сайт с проиндексированными местоположениями (например, index.html # home). Возможно, это было связано с тем, что я не смог заставить другие решения обновить мой конкретный кадр.
Сказав это, я знаю, что это не самая чистая вещь в мире, но она работает для моих целей. Надеюсь, это кому-нибудь поможет. Теперь, если бы я только мог понять, как не позволить iframe прокручивать родительскую страницу каждый раз, когда внутри iframe есть анимация ...
РЕДАКТИРОВАТЬ: я понял, что это не "обновить" iframe, как я надеялся, что это будет. Это перезагрузит первоначальный источник iframe. Все еще не могу понять, почему я не мог заставить работать ни один из других вариантов ..
ОБНОВЛЕНИЕ: причина, по которой я не смог заставить работать другие методы, заключается в том, что я тестировал их в Chrome, и Chrome не позволит вам получить доступ к содержимому iframe (Объяснение: Вероятно ли, что будущие выпуски Chrome будут поддерживать contentWindow / contentDocument, когда iFrame загружает локальный html-файл из локального html-файла? ), если он не происходит из того же места (насколько я понимаю). После дальнейшего тестирования я не могу получить доступ к contentWindow в FF.
ИЗМЕНЕНО JS
источник
В целях отладки можно открыть консоль, изменить контекст выполнения на фрейм, который он хочет обновить, и сделать
document.location.reload()
источник
Использование
self.location.reload()
перезагрузит iframe.источник