2015-04-16 11 views
8

następujące prace kodu idealnie w Chromeustawić Blob jako „src” w 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> 

Ale to nie działa w IE. Czy ktoś może mi powiedzieć, co tu jest nie tak.

Element iframe "src" również jest ustawiony na obiekt typu blob, jak pokazano poniżej.

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

Uwaga: poszedłem na ścieżce window.navigator.msSaveOrOpenBlob(newBlob) jak dobrze, ale nie ma szczęścia do tej pory.

Odpowiedz

2

Według http://caniuse.com/#feat=datauri IE 11 ma tylko częściowe wsparcie dla danych URI. Podaje ona, że ​​wsparcie ogranicza się do obrazów i powiązanych zasobów, takich jak CSS lub JS, a nie plików HTML.

Kodery danych SVG z kodowaniem non-base64 muszą być kodowane urien do pracy w IE i Firefox zgodnie z tą specyfikacją.

+0

Tak, jest to ograniczenie w IE w tej chwili – Hiran

0

Mam taki sam problem z IE. Jednak udało mi się pobrać/zapisać jako element działający w IE 10+ przy użyciu 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); 

Zobacz http://jsfiddle.net/o0wk71n2/ (na podstawie odpowiedzi przez @kol do JavaScript blob filename without link)

+0

Pobieranie/zapis jest ok dla mnie. Ale czy masz pojęcie, dlaczego nie działa z iframe? – Hiran

0

Przykładem zrobiłem dla Blob jako źródło iFrame i działa świetnie z jednym ważnym UWAGA/ostrzeżenie:

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

iFrame z Blob nie jest auto protokołu przekierowanie, co oznacza, mający <script src="//domain.com/script.js"</script> wewnątrz iframe head lub body nie załaduje skryptu JS w ogóle, nawet w przeglądarce Chrome 61 (obecna wersja).

nie wie, co zrobić ze źródłem "blob" jako protokołem. to jest WIELKIE ostrzeżenie tutaj.

Rozwiązanie: Kod ten rozwiąże problemu, działa głównie na reklamach VPAID i pracy dla auto-protokołem:

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(); 
} 
Powiązane problemy