我正在使用“数据”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 中引发错误:
不安全的 JavaScript 尝试使用 URL 访问框架 data:text/html;charset=utf-8,... from frame with URL http://... 请求访问的框架具有“http”协议,被访问的框架有一个协议''。协议必须匹配。
这是一个显示安全错误的小提琴:http: //jsfiddle.net/bhGcw/4/
Firefox 和 Opera 不会抛出此异常并允许更改 iframe 内容。似乎 Webkit 看到了数据 URI 的空白协议,并将其视为跨域违规。
有没有办法解决?