将 iframe 的 src="" 更改为 javascript:
Posted
技术标签:
【中文标题】将 iframe 的 src="" 更改为 javascript:【英文标题】:Change src="" of iframe to javascript: 【发布时间】:2015-02-01 11:18:51 【问题描述】:我正在尝试将 iframe 的来源更改为 javascript:... 我试过这个没有任何运气;
<iframe id="iframed" src="http://example.com"></iframe>
$('#iframed').attr('src','javascript:document.write("hello world")');
我收到“TypeError:document.write 不是函数”错误。 这样做的正确方法是什么?
【问题讨论】:
您是否尝试将内容放入<iframe>
?
这个错误听起来不相关。
如果您将 javascript:document.write("hello world") 写入 url 栏,它可以工作。那么为什么我们不能在 iframe 上做到这一点。 @pointy,是的。
如果 iframe 与您的代码所在的文档同源,您可以直接更改 iframe 的内容。如果不是,那么您也可以将 iframe 替换为包含所需内容的其他 iframe。
【参考方案1】:
由于您尝试在 iframe 中添加内容附加内容,因此您首先需要知道,如果您无法控制框架内的网站(在您的示例中为“http://exemple.com”),这可能是不可能的。
否则很容易注入脚本,这会导致各种安全问题。
如果您可以控制 iframe 内的网站,则可以使其能够理解来自包括 iframe 在内的网站的消息。如果你想这样做,你可能想看看"How to communicate between iframe and the parent site?"。
【讨论】:
【参考方案2】:我知道没有一个标准定义了当您将iframe
上的src
属性设置为使用javascript:
方案的URI 时应该发生什么。 a draft IETF note 表明已经存在哪些功能(例如在锚元素中的使用),但没有说用户代理必须做任何事情。您可以将其输入到浏览器的地址栏中,这是由于浏览器的实现。例如,我猜想将该 URL 输入到像 lynx 之类的命令行浏览器中会让你无处可去。
如果您想使用 JavaScript 在框架之间进行通信,那将是一个不同的问题。
【讨论】:
【参考方案3】:如果您只想将内容写入框架,您可以直接访问其文档对象:
document.getElementById("iframed").contentDocument.write("Hello World!");
但是,如果框架已经从外部域加载,这将不起作用。
【讨论】:
它不适用于任何 Internet Explorer 版本。它无法读取 contentDocument.write。该函数在 ie 中有不同的名称吗? @user198989 在旧版本的 IE 中,您可以访问contentWindow.document
,但我认为它应该像 IE8 以后的版本中的其他浏览器一样工作。
我明白了。可以放 代替 Hello world 吗?
@user198989 你可以写任何你想写的东西。如果您扩展您的问题并解释您的总体目标是什么,您可能会获得更多有用的信息。 为什么要在框架中创建内容?【参考方案4】:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<iframe id="iframed"></iframe>
<script>
var test = "Hello World!";
document.getElementById("iframed").src = "data:text/html;charset=utf-8," + test;
</script>
</body>
</html>
试试这个它在 chrome 中工作...也看看这个link
【讨论】:
document.write() 只是一个例子。我们可以用你的方法运行任何其他 js 函数吗? 我不确定你的意思? 我可以将 hello world 文本更改为 javascript 吗?这样我就可以运行 javascript 了吗? @user198989 为什么不创建一个单独的 html 页面并在 iframe 中链接到该页面? 在 Internet Explorer 中不起作用。浏览器尝试使用某些应用程序打开页面。很奇怪以上是关于将 iframe 的 src="" 更改为 javascript:的主要内容,如果未能解决你的问题,请参考以下文章
用iframe嵌套的页面会自动跳转覆盖父页面,请问如何解决?
将 iframe 的 src="" 更改为 javascript: