将 Blob 设置为 iframe 的 "src"
set a Blob as the "src" of an iframe
以下代码在 Chrome
中完美运行
<script>
function myFunction() {
var blob = new Blob(['<a id="a"><b id="b">hey!</b></a>'], {type : 'text/html'});
var newurl = window.URL.createObjectURL(blob);
document.getElementById("myFrame").src = newurl;
}
</script>
但它不适用于 IE。有人可以告诉我这里出了什么问题吗?
iframe "src" 也设置为如下所示的 blob。
<iframe id="myFrame" src="blob:0827B944-D600-410D-8356-96E71F316FE4"></iframe>
注意:
我也走 window.navigator.msSaveOrOpenBlob(newBlob)
路,但到目前为止运气不好。
我 运行 遇到了与 IE 相同的问题。但是,我已经能够使用 filesaver.js.
在 IE 10+ 中获得 download/save 作为作品
function onClick(e) {
var data = { x: 42, s: "hello, world", d: new Date() },
fileName = "my-download.json";
var json = JSON.stringify(data),
blob = new Blob([json], {type: "octet/stream"});
saveAs(blob, fileName);
e.preventDefault();
return false;
};
$('#download').click(onClick);
见http://jsfiddle.net/o0wk71n2/ (based on answer by @kol to JavaScript blob filename without link)
根据 http://caniuse.com/#feat=datauri IE 11 仅部分支持数据 URI。它声明支持仅限于图像和链接资源,如 CSS 或 JS,而不是 HTML 文件。
非 base64 编码的 SVG 数据 URI 需要根据本规范进行 uri 编码才能在 IE 和 Firefox 中工作。
我为 Blob 做的一个例子,作为 iFrame 的来源,并且与一个重要的 CAUTION / WARNING:
一起工作得很好
const blobContent = new Blob([getIFrameContent()], {type: "text/html"});
var iFrame = document.createElement("iframe");
iFrame.src = URL.createObjectURL(blobContent);
parent.appendChild(iFrame);
带有 Blob 的 iFrame 不是自动重定向协议,这意味着,在 iframe head
或 body
中包含 <script src="//domain.com/script.js"</script>
即使在 [=28] 上也根本不会加载 JS 脚本=] 61(当前版本)。
它不知道如何使用源 "blob" 作为协议。这是一个重要的警告。
解决方案:此代码将解决问题,它主要针对 VPAID 广告运行并适用于自动协议:
function createIFrame(iframeContent) {
let iFrame = document.createElement("iframe");
iFrame.src = "about:blank";
iFrameContainer.innerHTML = ""; // (optional) Totally Clear it if needed
iFrameContainer.appendChild(iFrame);
let iFrameDoc = iFrame.contentWindow && iFrame.contentWindow.document;
if (!iFrameDoc) {
console.log("iFrame security.");
return;
}
iFrameDoc.write(iframeContent);
iFrameDoc.close();
}
以下代码在 Chrome
中完美运行<script>
function myFunction() {
var blob = new Blob(['<a id="a"><b id="b">hey!</b></a>'], {type : 'text/html'});
var newurl = window.URL.createObjectURL(blob);
document.getElementById("myFrame").src = newurl;
}
</script>
但它不适用于 IE。有人可以告诉我这里出了什么问题吗?
iframe "src" 也设置为如下所示的 blob。
<iframe id="myFrame" src="blob:0827B944-D600-410D-8356-96E71F316FE4"></iframe>
注意:
我也走 window.navigator.msSaveOrOpenBlob(newBlob)
路,但到目前为止运气不好。
我 运行 遇到了与 IE 相同的问题。但是,我已经能够使用 filesaver.js.
在 IE 10+ 中获得 download/save 作为作品function onClick(e) {
var data = { x: 42, s: "hello, world", d: new Date() },
fileName = "my-download.json";
var json = JSON.stringify(data),
blob = new Blob([json], {type: "octet/stream"});
saveAs(blob, fileName);
e.preventDefault();
return false;
};
$('#download').click(onClick);
见http://jsfiddle.net/o0wk71n2/ (based on answer by @kol to JavaScript blob filename without link)
根据 http://caniuse.com/#feat=datauri IE 11 仅部分支持数据 URI。它声明支持仅限于图像和链接资源,如 CSS 或 JS,而不是 HTML 文件。
非 base64 编码的 SVG 数据 URI 需要根据本规范进行 uri 编码才能在 IE 和 Firefox 中工作。
我为 Blob 做的一个例子,作为 iFrame 的来源,并且与一个重要的 CAUTION / WARNING:
一起工作得很好const blobContent = new Blob([getIFrameContent()], {type: "text/html"});
var iFrame = document.createElement("iframe");
iFrame.src = URL.createObjectURL(blobContent);
parent.appendChild(iFrame);
带有 Blob 的 iFrame 不是自动重定向协议,这意味着,在 iframe head
或 body
中包含 <script src="//domain.com/script.js"</script>
即使在 [=28] 上也根本不会加载 JS 脚本=] 61(当前版本)。
它不知道如何使用源 "blob" 作为协议。这是一个重要的警告。
解决方案:此代码将解决问题,它主要针对 VPAID 广告运行并适用于自动协议:
function createIFrame(iframeContent) {
let iFrame = document.createElement("iframe");
iFrame.src = "about:blank";
iFrameContainer.innerHTML = ""; // (optional) Totally Clear it if needed
iFrameContainer.appendChild(iFrame);
let iFrameDoc = iFrame.contentWindow && iFrame.contentWindow.document;
if (!iFrameDoc) {
console.log("iFrame security.");
return;
}
iFrameDoc.write(iframeContent);
iFrameDoc.close();
}