从URL列表中设置iframe src

时间:2015-10-29 18:44:51

标签: javascript iframe

我无法动态设置iframe源代码。我有一个包含n个iframe和img元素的页面以及一个url列表。我正在尝试使用for循环设置每个iframe的/ img的src属性。

我的HTML就是这样:

<iframe id="iframe-1" width="400" height="300">iframe one</iframe>
<img width="400" height="300">image one</img>
<iframe id="iframe-2" width="400" height="300">iframe two</iframe>
<img width="400" height="300">image one</img>
<iframe id="iframe-3" width="400" height="300">iframe three</iframe>

这是我尝试过的。我也试过了:

<script type="text/javascript">

var sources =     ["www.google.com","www.yahoo.com","www.weather.com","www.bing.com","www.nytimes.com"];
var elements = document.querySelectorAll("iframe, src");

for (var i = o; i < elements.length; i++)
{
    elements[i].src = sources[i];
}
</script>

来源未显示在iframes / imgs中。是否有比querySelectorAll更好的DOM选择器?或者我应该在循环中有元素查询?我尝试过没有效果的变种。

感谢您的帮助

3 个答案:

答案 0 :(得分:0)

出于安全原因,您指定的网址无法加载到iframe中,这些网站可以防止Clickjack攻击。 Clickjack攻击可以通过X-Frame-Options响应头保护,“X-Frame-Options”值=“DENY”或“X-Frame-Options”值=“SAMEORIGIN”。通过此标头设置,所有标准网站都可以防止点击攻击。

答案 1 :(得分:0)

您的代码中有两个错误:

1)您正在将变量i设置为字符o。该行应为:

for (var i = 0; i < elements.length; i++)

2)你的iframe遗失http,所以正确的方法是将它们添加到数组中:

["http://www.google.com","http://www.yahoo.com","http://www.weather.com","http://www.bing.com","http://www.nytimes.com"]

修复这些错误后,您的脚本功能正常。

您必须注意,大多数热门网站都使用脚本或特殊的HTTP标头字段来阻止它们包含在iframe元素中。这就是为什么这些特定网站无法在iframe中显示的原因。

答案 2 :(得分:0)

目标?

我对你要做的事情有点困惑。您在网页上看到了一些iFrame,并且您有一系列网址,并且您希望使用这些网址更新网页上的iFrame。

明显的问题

我在您的初始帖子中发现了一些明显的问题。首先,选择器"iframe, src"没有意义,因为没有"src"元素。如果您尝试选择具有src属性的任何内容,则可以使用如下选择器:"[src]"

其次,你的for循环不正确。您使用的是o字母而不是数字0。你的for循环应该如下所示: for (var i = 0; i < elements.length; i++)

最后,在将网址添加到iFrame时,您应该将http://附加到您的网址。您还可以通过以下格式制作网址来使其与协议无关://www.google.com

建议

这种方法通常有点奇怪,因为每次要向阵列添加新链接时,都必须向页面添加其他iframe。相反,为什么不简单地为每个URL插入一个新的iFrame?

修改

正如另一位用户提到的,许多网站会阻止您将其嵌入iFrame中。例如,如果您在Google.com上注意到x-frame-options:SAMEORIGIN标题,则表明它不会在一个框架中显示该网站,除非该框架是从同一个域提供的。