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?

Ответы:


166

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

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

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


Причина, по которой это не сработает, заключается в том, что после загрузки страницы другая ссылка изменит 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, и это делает это возможным.
— Брайан Ризо


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 и включает данные для этой таблицы.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.