【问题标题】:Change src="" of iframe to javascript:将 iframe 的 src="" 更改为 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。

标签: javascript jquery html 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 中不起作用。浏览器尝试使用某些应用程序打开页面。很奇怪
      猜你喜欢
      • 2011-04-13
      • 2013-07-04
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 2017-01-23
      • 2014-05-02
      相关资源
      最近更新 更多