2015-06-10 152 views
0

我的服務器上有一個使用Azure存儲來存儲文件的文件瀏覽器。該網站有一個功能,當你點擊一個文件時,它會彈出一個詳細信息窗口。我使用ViewerJS來顯示文件的pdf預覽(如果適用),並且它一切正常。唯一的問題是,當下載預覽文件時,您必須手動重新加載預覽iframe才能顯示它。有關PHP函數是:
http://pastebin.com/sAyhsbfi
當此功能完成(我使用AJAX),該$.done函數調用
response = JSON && JSON.parse(response) || jQuery.parseJSON(response); $scope.pdfthingy=response;document.getElementById("viewerjs_preview").contentDocument.location.reload(true);
其中response在第一行設置爲完整路徑名pdf預覽文件,並且viewerjs_preview是相關iframe的ID。
出於某種原因,這不起作用,並且iframe不會重新加載自身。如何在blob完成下載後做到這一點,並設置了pdfthingy?下載blob後刷新iframe

+0

嗨,歡迎來到StackOverflow!那麼,你到目前爲止解決了什麼問題?你觀察到什麼確切的錯誤?請理解(http://stackoverflow.com/help/asking)StackOverflow不是一個提問「我該怎麼做?」的地方。 – astaykov

回答

0

我想也許我的問題不清楚,爲此,我很抱歉。我會盡量回去編輯它明天。
對我來說,解決辦法是,而不是使用angularjs設置的iframe src屬性,直接與
document.getElementById("iframe-id").src=/path_where_I_put_the_files/filename
設置(僅供參考我使用「pdfthingy」來存儲由AJAX調用下載一個返回的文件名BLOB)。
這會阻止iframe在設置文件名之前加載空來源。 這也許是walkformusle爲什麼說DOM不應該以這種方式控制的一部分。

+0

你可以在anguar中顯示更完整的Ajax函數嗎? –

+0

這有幫助嗎? [http://pastebin.com/6B7kJp5T] formData()之上的東西;應該對你沒有意義;這只是我做的一些垃圾,以確保我擁有正確的文件。 – ocket8888

0

iframe的域是否與您的主機網站的域相同?否則,我們無法在主機網站的JavaScript代碼中訪問contentDocument(或contentWindow)。

要刷新的iframe,按我的理解,你可以設置它的源:

document.getElementById('viewerjs_preview').src = document.getElementById('viewerjs_preview').src; 

請注意如果src包含哈希標籤,我們可能需要額外的工作。我想建議您檢查What's the best way to reload/refresh an iframe using JavaScript?瞭解更多信息。

0

根據我的經驗,我們可能會更改IFrame URL,但IFrame會顯示預覽內容。在這種情況下,我建議你可以創建IFarme動態。例如,當您獲得Blob URI表單Azure存儲時,您可以嘗試刪除Iframe並創建一個新表單。

<iframe id="viewerjs_preview" src = "/ViewerJS/#../azure blob storage url /pre-blobname .pdf " width='400' height='300' allowfullscreen webkitallowfullscreen></iframe> 

您可以嘗試使用此代碼:舉例來說,如果你的預覽內容是在iframe如圖

function recreateIFM() { 
      document.getElementById("viewerjs_preview").parentNode.removeChild(document.getElementById("viewerjs_preview")); 
      var ifm = document.createElement("iframe"); 
      ifm.id = "viewerjs_preview"; 
      ifm.width = "600px"; 
      ifm.height = "400px"; 
      ifm.src = "/ViewerJS/#../azure blob storage url /new-blobname .pdf"; 
      document.body.appendChild(ifm); 

     } 

此外,您還可以嘗試張明旭的有關如何刷新參考/重裝iframe中。

問候, Bill_Sww