将 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 不是函数”错误。 这样做的正确方法是什么?

【问题讨论】:

您是否尝试将内容放入&lt;iframe&gt; 这个错误听起来不相关。 如果您将 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:

【新手】jquery iframe的src动态赋值问题

html页面中嵌套iframe标签,但不显示内容怎么回事? 不显示table.html

js怎样获取iframe,src中的参数

ie 下面 js动态设置 iframe src 不显示,一片空白