gpt4 book ai didi

javascript - 以编程方式访问使用数据 URI 作为源的 iframe

转载 作者:可可西里 更新时间:2023-11-01 02:56:41 27 4
gpt4 key购买 nike

我正在使用“数据”URI 以编程方式创建一个 iframe:

<iframe id="myFrame" src='data:text/html;charset=utf-8,<!DOCTYPE html><html><head></head><body><h1>Hello.</h1></body></html>'></iframe>​

此框架加载正常,但似乎以编程方式使用 iframe 会遇到跨域安全检查。

var iframeDoc = document.getElementById('myFrame').contentWindow.document;
$(iframeDoc.body).find('h1').text('Changed');

在 Chrome 和 Safari 中抛出错误:

Unsafe JavaScript attempt to access frame with URL data:text/html;charset=utf-8,... from frame with URL http://... The frame requesting access has a protocol of 'http', the frame being accessed has a protocol of ''. Protocols must match.

这是一个显示安全错误的 fiddle :http://jsfiddle.net/bhGcw/4/

Firefox 和 Opera 不会抛出此异常并允许更改 iframe 内容。似乎 Webkit 看到了数据 URI 的空白协议(protocol),并将其视为跨域违规。

有什么办法解决这个问题吗?

最佳答案

有点晚了,如何不使用数据 URL,而是使用 HTML5 属性 srcdoc。

<iframe id="iframe" srcdoc='<html><body><h1>Hello!</h1></body></html>'></iframe>
<script type="text/javascript">
$(function(){
$($("iframe")[0].contentWindow.document).find("h1").text("Modified from the parent window!");
});
</script>

http://jsfiddle.net/ff3bF/ 有一个例子

关于javascript - 以编程方式访问使用数据 URI 作为源的 iframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14149523/

27 4 0
文章推荐: java - 根据每个对象内的 List 过滤 List