Changing iframe src with Javascript

2019-01-01 15:53发布

问题:

I am trying to change an iframe src when someone clicks a radio button. For some reason my code is not working correctly and I am having trouble figuring out why. Here is what I have:

<!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>

回答1:

In this case, it\'s probably because you are using the wrong brackets here:

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

should be

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


回答2:

Maybe this can be helpful... It\'s plain html - no 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>

By the way some sites do not allow you to open them in iframe (security reasons - clickjacking)



回答3:

Here\'s the jQuery way to do it:

$(\'#calendar\').attr(\'src\', loc);


回答4:

The onselect must be onclick. This will work for keyboard users.

I would also recommend adding <label> tags to the text of \"Day\", \"Month\", and \"Year\" to make them easier to click on. Example code:

<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>

I would also recommend removing the spaces between the attribute onclick and the value, although it can be parsed by browsers:

<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

Should be:

<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


回答5:

This should also work, although the src will remain intact:

document.getElementById(\"myIFrame\").contentWindow.document.location.href=\"http://myLink.com\";


回答6:

Here is my updated code. It works fine and it can help you.

<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>


回答7:

You can solve it by making the iframe in javascript

  document.write(\" <iframe  id=\'frame\' name=\'frame\' src=\'\" + srcstring + \"\' width=\'600\'  height=\'315\'   allowfullscreen></iframe>\");