Изменение src iframe с помощью Javascript


98

Я пытаюсь изменить, <iframe src=... >когда кто-то нажимает переключатель. По какой-то причине мой код работает некорректно, и я не могу понять, почему. Вот что у меня есть:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
  <title>Untitled 1</title>

  <script>
  function go(loc) {
    document.getElementById('calendar').src = loc;
  }
  </script>
</head>

<body>
  <iframe id="calendar" src="about:blank" width="1000" height="450" frameborder="0" scrolling="no"></iframe>

  <form method="post">
    <input name="calendarSelection" type="radio" onselect="go('http://calendar.zoho.com/embed/9a6054c98fd2ad4047021cff76fee38773c34a35234fa42d426b9510864356a68cabcad57cbbb1a0?title=Kevin_Calendar&type=1&l=en&tz=America/Los_Angeles&sh=[0,0]&v=1')" />Day
    <input name="calendarSelection" type="radio" onselect="go('http://calendar.zoho.com/embed/9a6054c98fd2ad4047021cff76fee38773c34a35234fa42d426b9510864356a68cabcad57cbbb1a0?title=Kevin_Calendar&type=1&l=en&tz=America/Los_Angeles&sh=[0,0]&v=1')" />Week
    <input name="calendarSelection" type="radio" onselect="go('http://calendar.zoho.com/embed/9a6054c98fd2ad4047021cff76fee38773c34a35234fa42d426b9510864356a68cabcad57cbbb1a0?title=Kevin_Calendar&type=1&l=en&tz=America/Los_Angeles&sh=[0,0]&v=1')" />Month
  </form>

</body>

</html>


@Pekka Вот почему это комментарий.
mbq

@mbq нет, в данном случае это действительно плохая идея. Кажется, что OP встраивает код из внешней службы. Вы не можете получить это с помощью AJAX в первую очередь из-за междоменной безопасности, и даже если бы вы могли, наличие HTML и его размещение в DIV не сработало бы, потому что он мог бы содержать относительные ссылки на изображения и таблицы стилей и такой. Я думаю, что здесь действительно стоит использовать IFrames
Пекка

@Pekka Я согласен; Я пропустил ту часть удаленного обслуживания. Я удалил свой комментарий, чтобы не запутать людей.
mbq

ПОЧЕМУ ДОЗА НЕ РАБОТАЕТ приведенный выше код в любом браузере ????
Харикс

Ответы:


127

В данном случае, вероятно, это потому, что вы используете неправильные скобки:

document.getElementById['calendar'].src = loc;

должно быть

document.getElementById('calendar').src = loc;

11
Атрибут @shinjuo onselectздесь не подходит . Вы можете захотеть использовать onclick- обратите внимание, что это не сработает, если пользователь будет использовать свою клавиатуру
Пекка

Вот что это было. Спасибо. Причина, по которой я выбрал выбор, заключается в том, что я думал, что если кто-то нажмет пробел и нажмет пробел вместо щелчка мышью, это все равно изменится
shinjuo

@shinjuo да, это хорошая идея. Я думаю, что для этого вам придется использовать какой-то вариант onchange.
Пекка

2
«onclick» работает для клавиатуры. Событие onselect отсутствует.
Aaron D

@Aaron есть нестандартное событие onselect, но оно для выделения текста. Если onclickработает для включения / выключения радиокнопки, то все решено, отлично!
Пекка

67

Может быть, это может быть полезно ... Это простой html - без javascript:

<p>Click on link bellow to change iframe content:</p>
<a href="http://www.bing.com" target="search_iframe">Bing</a> -
<a href="http://en.wikipedia.org" target="search_iframe">Wikipedia</a> -
<a href="http://google.com" target="search_iframe">Google</a> (not allowed in inframe)

<iframe src="http://en.wikipedia.org" width="100%" height="100%" name="search_iframe"></iframe>

Кстати некоторые сайты не позволяют открывать их в iframe (из соображений безопасности - кликджекинг)


2
Не могли бы объяснить, почему " google.com " не разрешен в инфраструктуре, и какие-либо советы, как сделать его доступным (не должно быть iframe, но аналогично)? Я так ценю.
Fuevo

2
@ hikaru89 это запоздалый ответ ... Вы не можете просто "сделать" его доступным. Это не разрешено в iframe специально, Google делает это по многим причинам самостоятельно.
Мистер SirCode


9

onselectДолжно быть onclick. Это будет работать для пользователей клавиатуры.

Я бы также порекомендовал добавить <label>теги к тексту «День», «Месяц» и «Год», чтобы их было легче нажимать. Пример кода:

<input id="day" name="calendarSelection" type="radio" onclick="go('http://calendar.zoho.com/embed/9a6054c98fd2ad4047021cff76fee38773c34a35234fa42d426b9510864356a68cabcad57cbbb1a0?title=Kevin_Calendar&type=1&l=en&tz=America/Los_Angeles&sh=[0,0]&v=1')"/><label for="day">Day</label>

Я бы также рекомендовал удалить пробелы между атрибутом onclickи значением, хотя он может быть проанализирован браузерами:

<input name="calendarSelection" type="radio" onclick = "go('http://calendar.zoho.com/embed/9a6054c98fd2ad4047021cff76fee38773c34a35234fa42d426b9510864356a68cabcad57cbbb1a0?title=Kevin_Calendar&type=1&l=en&tz=America/Los_Angeles&sh=[0,0]&v=1')"/>Day

Должно быть:

<input name="calendarSelection" type="radio" onclick="go('http://calendar.zoho.com/embed/9a6054c98fd2ad4047021cff76fee38773c34a35234fa42d426b9510864356a68cabcad57cbbb1a0?title=Kevin_Calendar&type=1&l=en&tz=America/Los_Angeles&sh=[0,0]&v=1')"/>Day

2
@nalply - я не понимаю твой голос против. Основная проблема не в пробелах, которые, как я сказал, следует изменить. Проблема в том, что onselect должен быть onclick. Также обратите внимание, что другой ответ Пекки не решает проблему. Я переупорядочу свой ответ, чтобы было понятнее.
Aaron D

Я убрал голос против, потому что ваше новое правка более четкое, чем раньше.
nalply


2

Вот мой обновленный код. Он отлично работает и может вам помочь.

<head>
  <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
  <title>Untitled 1</title>
  <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.2.js"></script>
  <script type="text/javascript">
  function go(loc) {
    document.getElementById('calendar').src = loc;
  }
  </script>
</head>

<body>
  <iframe id="calendar" src="about:blank" width="1000" height="450" frameborder="0" scrolling="no"></iframe>

  <form method="post">
    <input name="calendarSelection" type="radio" onclick="go('http://calendar.zoho.com/embed/9a6054c98fd2ad4047021cff76fee38773c34a35234fa42d426b9510864356a68cabcad57cbbb1a0?title=Kevin_Calendar&type=1&l=en&tz=America/Los_Angeles&sh=[0,0]&v=1')" />Day
    <input name="calendarSelection" type="radio" onclick="go('http://calendar.zoho.com/embed/9a6054c98fd2ad4047021cff76fee38773c34a35234fa42d426b9510864356a68cabcad57cbbb1a0?title=Kevin_Calendar&type=1&l=en&tz=America/Los_Angeles&sh=[0,0]&v=1')" />Week
    <input name="calendarSelection" type="radio" onclick="go('http://calendar.zoho.com/embed/9a6054c98fd2ad4047021cff76fee38773c34a35234fa42d426b9510864356a68cabcad57cbbb1a0?title=Kevin_Calendar&type=1&l=en&tz=America/Los_Angeles&sh=[0,0]&v=1')" />Month
  </form>

</body>

</html>

0

изменить onselectна onchangeвходы и использовать

calendar.src = loc


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