能否“伪造”iframe的src属性?

14

我尝试使用JavaScript将一个iframe动态添加到网页中。 我想知道是否可以在不通过URL使用另一个html文件的情况下设置iframe的src属性。

我的意思是,是否有一种方法可以使用JS变量“伪造”src属性文件的HTML代码,在其中设置我自己的代码(它本身就是JS)?

我将使用DOM createElement在jQuery中创建iframe。

谢谢!


你为什么想要一个框架?使用div和overflow:scroll有什么问题吗? - Quentin
3个回答

30

你可以研究一下data:URI

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

或者说

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

该方案受到IE >= 8 (MSDN来源),Firefox,Safari 3+和Opera的支持。

它具有不同的长度限制。Opera被认为在约4千字节处截断;Internet Explorer在32千字节处截断。Firefox没有明确的长度限制。

有关数据URI以及转换工具的更多信息,请参见Mozilla Developer Central


@Lucas 哎呀,那不太好。也许可以再提一个问题,如果你自己创建元素的话应该有解决办法。 - Pekka
@Pekka 我想添加到iframe中的代码是一个谷歌广告,它调用JS谷歌代码,而JS谷歌代码本身使用了一个iframe。这就是为什么它不喜欢它的原因。我看过的某个地方说,我可以通过设置域等来解决这个问题。我会自己尝试一下,如果我自己做不了,我再提问! - Lucas
以防万一,完整的错误信息如下: “Unsafe JavaScript attempt to access frame with URL file:///home/lucas/Bureau/google_ad.html from frame with URL data:text/html, <script>google_comments</script> <script type="text/javascript" src="google_path.js"></script>. Domains, protocols and ports must match."“file:///home/lucas/Bureau/google_ad.html”是我用来尝试各种东西的实验文件。 “<script>google_comments</script> <script type="text/javascript" src="google_path.js"></script>”是我的(简化版)广告代码。 - Lucas
我想使用JavaScript从Java小程序中填充一个iFrame,其中包含大约200Kb的PDF文件...您认为这个解决方案可行吗? - Jaime Hablutzel
@jaime 我不确定使用数据URI如何与PDF查看器插件配合工作。不过还是值得一试的。 - Pekka
显示剩余6条评论

1
如果您完全在客户端控制 iframe,并且永远不需要使用该 iframe 进行服务器端请求,则可能更容易样式化 div,使其看起来像一个 iframe(请查看 overflow 属性),在这种情况下,您将可以更简单和直接地控制该 div 的 DOM 内容。

我进行服务器端请求,所以我使用DOM。 - Lucas

-1

以下代码应该可以实现你想要的功能。

你可以将src属性留空。

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

页面加载后我不能这样做。 - Lucas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接