使用 Javascript 更改 iframe src
Posted
技术标签:
【中文标题】使用 Javascript 更改 iframe src【英文标题】:Changing iframe src with Javascript 【发布时间】:2011-04-13 09:50:19 【问题描述】:当有人单击单选按钮时,我正在尝试更改 <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" 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 不,我的意思是在这种情况下这是一个非常糟糕的主意。 OP 似乎正在嵌入来自外部服务的代码。由于跨域安全性,您首先无法使用 AJAX 获取它,即使可以,拥有 HTML 并将其放入 DIV 也行不通,因为它可能包含对图像和样式表的相对引用和这样的。我认为 IFrame 真的很适合这里 @Pekka 我同意;我错过了远程服务部分。我删除了我的评论,以免引起人们的困惑。 为什么上面的代码在任何浏览器中都有效???? 【参考方案1】:在这种情况下,可能是因为您在这里使用了错误的括号:
document.getElementById['calendar'].src = loc;
应该是
document.getElementById('calendar').src = loc;
【讨论】:
@shinjuoonselect
不是此处使用的正确属性。您可能想使用onclick
- 请注意,如果用户使用他们的键盘,它不会触发
原来如此。谢谢。我选择 select 的原因是因为我认为如果有人通过 tab 键并点击空格而不是鼠标点击它仍然会改变
@shinjuo 是的,这是个好主意。我认为您必须为此使用onchange
的一些变体。
"onclick" 适用于键盘。没有“onselect”事件。
@Aaron 有一个非标准的 onselect 事件,但它用于选择文本。如果onclick
可以打开/关闭单选按钮,那么一切都解决了,太好了!【参考方案2】:
也许这会有所帮助...它是纯 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" name="search_iframe"></iframe>
顺便说一句,有些网站不允许您在 iframe 中打开它们(安全原因 - 点击劫持)
【讨论】:
能否解释一下为什么“google.com”不允许在 inframe 中以及任何建议使其可用(不能是 iframe,但类似)?非常感谢。 @hikaru89 这是一个迟到的回复......你不能只是“让”它可用。它不允许在 iframe 中故意使用,谷歌出于多种原因自行这样做。【参考方案3】:这是 jQuery 的方法:
$('#calendar').attr('src', loc);
【讨论】:
【参考方案4】: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
【讨论】:
@nalply - 我不明白你的反对意见。根本问题不是空格,我说 应该 改变。问题是onselect应该是onclick。另请注意,Pekka 的另一个答案并没有解决问题。我将重新排序我的答案以使其更清楚。 我删除了反对票,因为您的新编辑比以前更清晰。【参考方案5】:这也应该有效,尽管 src
将保持不变:
document.getElementById("myIFrame").contentWindow.document.location.href="http://myLink.com";
【讨论】:
当 iframe 中的页面位于不同的域时,这将不起作用。【参考方案6】:这是我更新的代码。它工作正常,它可以帮助你。
<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" 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】:其他答案都不适合我,更改 src
后 iframe 没有刷新,所以这就是最终所做的:
let calendar = document.getElementById("calendar");
calendar.setAttribute("src", srcstring);
MDN
【讨论】:
【参考方案8】:将输入中的 onselect
更改为 onchange
并使用
calendar.src = loc
<!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)
calendar.src = loc;
</script>
</head>
<body>
<iframe id="calendar" src="about:blank" frameborder="0" scrolling="no"></iframe>
<form method="post">
<input name="calendarSelection" type="radio" onchange="go('https://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" onchange="go('https://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" onchange="go('https://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>
【讨论】:
【参考方案9】:你可以通过在javascript中制作iframe来解决它
document.write(" <iframe id='frame' name='frame' src='" + srcstring + "' width='600' height='315' allowfullscreen></iframe>");
【讨论】:
以上是关于使用 Javascript 更改 iframe src的主要内容,如果未能解决你的问题,请参考以下文章
iOS 浏览器 - 使用 JavaScript 更改 css 或内容时 iFrame 跳转到顶部
谷歌浏览器在 JavaScript 动态更改后未更新 iframe 元素 innerHTML