<强>场景:我在写一个可嵌入的部件。它需要一个<script>标签,它建立包含它需要显示所有的iframe的形式。 iframe的没有src,和脚本写入到它theIframe.contentWindow.document.write()。这样可以使包含在微件,并保持元件ID和脚本从与在其上小部件被嵌入在页面冲突。

<强>诀窍:该插件具有能够改变其大小。要做到这一点,它会将其包含iframe的style.height。这需要访问外部页面的DOM。在<强>火狐和<强> IE 下,这是允许的,因为iframe的文档和外文件被认为是共享的原点。

<强>扭曲:在的 Safari浏览器下,然而,这两个文件都被认为共享的原点。内文件被认为是在about:blank,而外文件显然使用不同的协议和“域”(如果blank可以被认为是结构域)。

问题:我怎样才能建立一个iframe编程,其文件的Safari / WebKit的会考虑到有相同的原点为窗口的文档创建它。


修改:经过进一步的实验,我无法找到一个方法来编程创建一个iframe其位置,无论自己是否更改其内容不about:blank

如果我创建document.createElement()框架,把它指向名为“foo.html”同根同源真正的HTML资源srcdocument.body.appendChild()它,Safari浏览器的控制台显示为预计在DOM元素,但的页的内容不出现,并且该文档的边栏中为“约:空白”列出。

如果我包括用于直接在页面的IFRAME的HTML,foo.html的内容出现,而“foo.html”出现在侧边栏。

如果我插入使用document.write()的HTML,我得到相同的结果与document.body.appendChild()

这两种方案的版本工作在Firefox。

有帮助吗?

解决方案 2

啊哈。这似乎是在WebKit的一个bug。当编程方式创建一个iframe,其src属性将被忽略。取而代之的是,帧默认为about:blank并且必须被引导到一个URL来指向别处。例如:

theIframe.contentWindow.location = theIframe.src

其他提示

我能给的最好的建议是让IFRAME设置为同一个服务器上的一个空白页(即blank.html),然后编辑内容。在后一痛,我知道,但它是一种解决方法。

您也可以尝试

iframe.contentDocument.open("replace");
iframe.contentDocument.write("<b>This is some content</b>");
iframe.contentDocument.close();

不过,我不知道这只能在IE浏览器。抱歉,我不能比这更有益。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top