如何构建一个iframe与同域在Safari / WebKit的页面
-
21-08-2019 - |
题
<强>场景强>:我在写一个可嵌入的部件。它需要一个<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资源src
和document.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浏览器。抱歉,我不能比这更有益。