【问题标题】:Is it possible to "fake" the src attribute of an iframe?是否可以“伪造” iframe 的 src 属性?
【发布时间】:2010-08-11 20:55:18
【问题描述】:

我尝试使用 JavaScript 向网页动态添加 iframe。我想知道是否可以在不通过 URL 使用另一个 html 文件的情况下设置 iframe 的 src 属性。 我的意思是有没有办法用 JS 变量“伪造” src 属性文件的 html,我们可以在其中设置我的代码(这是 JS 本身)? 我会使用 DOM createElement 在 jQuery 中创建 iframe。

谢谢!

【问题讨论】:

  • 为什么要画框?只使用 div 和 overflow: scroll 有什么问题?

标签: javascript jquery iframe


【解决方案1】:

您可以查看data:URIs

<iframe src="data:text/html, .... URLencoded HTML data ....">

或者

<iframe src="data:text/html;base64, .... base64 encoded HTML data ....">

IE >= 8 (MSDN source)、Firefox、Safari 3+ 和 Opera 支持该方案。

它有不同的长度限制。据说 Opera 在大约 4 KB 处被截断; 32 KB 的 Internet Explorer。 Firefox 没有明确的长度限制。

有关数据 URI 和转换工具的更多信息,请访问 Mozilla Developer Central

【讨论】:

  • 这似乎是我需要的。您是否知道是否有一种方法可以使用 Element 创建进入 HTML 数据的代码,或者我不知道如何,然后在 src 中使用它?因为我的代码是 JavaScript,目前我不能直接做。但它会再试一次。
  • @Lucas jQuery 的.html() 应该为您提供任何元素的 HTML 内容。 encodeURIComponent() 应该对其进行正确编码以便在第一个示例中使用。 JS 中没有原生的 base64() 实现,但最好使用 URIencoded 方式,因为 base64 会使代码膨胀 33%。
  • 事实上这仍然不起作用,但我当前的错误是“不安全的 JavaScript 尝试访问带有 URL、域、协议和端口必须匹配的框架”错误。我会为此做其他搜索。但是谢谢=)
  • @Lucas awww,这不好。也许值得另一个问题,如果您自己创建元素,应该有办法解决这个问题。
  • @Pekka 我想添加到 iframe 中的代码是一个谷歌广告,它需要一个 JS 谷歌代码,它本身使用 iframe。这就是我认为它不喜欢它的原因。我想我在某个地方看到了我可以通过设置域等来解决这个问题。我会自己尝试一下,然后问一个问题,如果我不能一个人做!
【解决方案2】:

如果您完全在客户端控制 iframe,并且永远不需要使用该 iframe 发出服务器端请求,则将 div 设置为看起来像 iframe 可能更容易(查看overflow 属性),您可以更简单、更直接地控制该 div 的 DOM 内容。

【讨论】:

  • 我做服务器端请求,这就是我使用 DOM 的原因
【解决方案3】:

下面的代码应该做你想做的事。

您可以将 src 属性留空。

var yourcontent="<div>your stuff</div>";
window.frames['frame_name'].document.write=yourcontent;

【讨论】:

  • 页面加载后我不能这样做。
猜你喜欢
  • 2012-11-03
  • 2021-06-04
  • 1970-01-01
  • 2018-08-18
  • 2011-06-26
  • 1970-01-01
  • 2023-04-02
  • 2013-07-16
  • 2022-12-03
相关资源
最近更新 更多