jQuery Принудительно установить атрибут src для iframe

83

У меня есть главная страница (на самом деле JSP) с iframe внутри нее как;

<iframe name="abc_frame" id="abc_frame" src="about:blank" frameborder="0" scrolling="no"></iframe>

Теперь на главной странице есть несколько ссылок (отображаемых динамически через JSP), которые могут попытаться установить src на какой-то URL ...

Теперь мой вопрос: используя jQuery (может быть live ()), могу ли я переопределить это таким образом, чтобы атрибут «src» для abc_frame всегда имел какое-то конкретное значение (например, «somefixedURL»)

Я не могу зафиксировать щелчок по ссылке, поскольку он полностью динамически создается с помощью некоторого кода Java, и поэтому я пытаюсь переопределить iframe src?

testndtv
источник

Ответы:

166

Используйте attr

$('#abc_frame').attr('src', url)

Таким образом вы можете получить и установить каждый атрибут тега HTML. Обратите внимание, что есть также .prop(). См .prop () против .attr () о различиях. Краткая версия: .attr()используется для атрибутов, поскольку они написаны в исходном коде HTML, и .prop()для всего этого JavaScript, прикрепленного к элементу DOM.

PiTheNumber
источник
Причина, по которой это не сработает, заключается в том, что после загрузки страницы другая ссылка изменит src на новое значение ...
testndtv
Если вы укажете код в конце файла, ваш код будет выполнен после других сценариев. Если ваша проблема возникает из-за определенной ссылки, по которой нажимает пользователь, вы можете добавить второе событие onclick к ссылке. В противном случае вам придется использовать setTimout / setInterval и повторно проверять значение src (уродливо!).
PiTheNumber
20

если вы используете jQuery 1.6 и выше, вы хотите использовать .prop (), а не.attr():

$('#abc_frame').prop('src', url)

См. Этот вопрос для объяснения различий.

Калифе
источник
4
Интересная ссылка, но обратите внимание, что ответ был обновлен, потому что jQuery вернул attr() поведение. В целом я бы не согласился с использованием .prop()здесь, потому что srcэто атрибут, а не свойство, как .prop()объясняется в документации API для вас.
PiTheNumber
9

При создании ссылок установите цель в свойство name iframes, и вам, вероятно, вообще не придется иметь дело с jquery.

<a href="inventory.aspx" target="contentframe"  title="Title Inventory">
<iframe id="iframe1" name="contentframe"  ></iframe>
Брайан Ризо
источник
Хорошая идея использовать собственный метод браузера, когда это возможно, но я думаю, что у пользователя есть динамические ссылки, поэтому ему необходимо фиксировать атрибут click.
efwjames 06
Насколько динамично? При создании страницы просто установите href на все, что вам нужно. Или даже при загрузке dom просто установите атрибут href, если вам нужно. Дело в том, чтобы не обрабатывать свойство src iframe, и это делает это возможным.
Брайан Ризо
8
$(document).ready(function() {
    $('#abc_frame').attr('src',url);
})
Джайендра
источник
5

Установка атрибута src у меня не сработала. В iframe не отображался URL-адрес.

Для меня сработало:

window.open(url, "nameof_iframe");

Надеюсь, это кому-то поможет.

Хари
источник
установка с помощью .attr () также не сработала для меня. Хотя это работает
Энди Н
3
<script type="text/javascript">
  document.write(
    "<iframe id='myframe' src='http://www.example.com/" + 
    window.location.search + "' height='100' width='100%' >"
  ) 
</script>  

Этот код берет параметры URL-адреса (? A = 1 & b = 2) со страницы, содержащей iframe, и прикрепляет их к базовому URL-адресу iframe. Это работает для моих целей.

Аренд
источник
document.writeэквивалентно использованию eval()- это зависит от внедрения сценария! Используйте только с особой осторожностью!
amphetamachine
1

Вы не можете установить FIX iframe src или запретить отправке javascript / формы изменить свое местоположение. Однако вы можете поместить скрипт для загрузки страницы и изменить действие каждой динамической ссылки.

Ян Пфайфер
источник
1
$(".excel").click(function () {
    var t = $(this).closest(".tblGrid").attr("id");
    window.frames["Iframe" + t].document.location.href = pagename + "?tbl=" + t;
});

это то, что я использую, для этого не требуется jquery. в этом конкретном сценарии для каждой таблицы, которая у меня есть со значком экспорта Excel, это заставляет iframe, прикрепленный к этой таблице, загружать ту же страницу с переменной в строке запроса, которую ищет страница, и, если найден ответ, записывает поток с excel mimetype и включает данные для этой таблицы.

вернмик
источник