2015-04-16 7 views
8

Il seguente codice di lavoro perfettamente in Chromeimpostare un Blob come il "src" di un iframe

<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> 

Ma non funziona con IE. Qualcuno può dirmi cosa c'è che non va qui.

Anche l'iframe "src" è impostato sul BLOB come mostrato di seguito.

<iframe id="myFrame" src="blob:0827B944-D600-410D-8356-96E71F316FE4"></iframe> 

Nota: sono andato sul percorso window.navigator.msSaveOrOpenBlob(newBlob) come pure, ma senza fortuna finora.

risposta

2

Secondo http://caniuse.com/#feat=datauri IE 11 ha ottenuto solo un supporto parziale per dati URI. Il supporto è limitato alle immagini e alle risorse collegate come CSS o JS, non ai file HTML.

Gli URI di dati SVG codificati non-base64 devono essere uriencodificati per funzionare in IE e Firefox come in base a questa specifica.

+0

Sì, questa è una limitazione in IE al momento – Hiran

0

Ho incontrato lo stesso problema con IE. Tuttavia, sono stato in grado di ottenere il download/salvataggio come pezzo funzionante in IE 10+ utilizzando filesaver.js.

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); 

Vedi http://jsfiddle.net/o0wk71n2/ (in base alla risposta da @kol a JavaScript blob filename without link)

+0

Il download/salvataggio è ok anche per me. Ma hai qualche idea del perché non funziona con iframe – Hiran

0

Un esempio che ho fatto per Blob come fonte di iFrame e lavorare grande con una sola importante ATTENZIONE/AVVISO:

const blobContent = new Blob([getIFrameContent()], {type: "text/html"}); 
var iFrame = document.createElement("iframe"); 
iFrame.src = URL.createObjectURL(blobContent); 
parent.appendChild(iFrame); 

iFrame con Blob non è automatico il protocollo di reindirizzamento, significato, avendo <script src="//domain.com/script.js"</script> all'interno del iframe head o body non caricheranno affatto lo script JS nemmeno su Chrome 61 (versione corrente).

non sa cosa fare con il sorgente "blob" come protocollo. questo è un grande avvertimento qui.

Soluzione: Questo codice risolverà il problema, viene eseguito per lo più per gli annunci VPAID e lavorare per auto-protocollo:

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(); 
} 
Problemi correlati