我的服務器上有一個使用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
回答
我想也許我的問題不清楚,爲此,我很抱歉。我會盡量回去編輯它明天。
對我來說,解決辦法是,而不是使用angularjs設置的iframe src屬性,直接與
document.getElementById("iframe-id").src=/path_where_I_put_the_files/filename
設置(僅供參考我使用「pdfthingy」來存儲由AJAX調用下載一個返回的文件名BLOB)。
這會阻止iframe在設置文件名之前加載空來源。 這也許是walkformusle爲什麼說DOM不應該以這種方式控制的一部分。
你可以在anguar中顯示更完整的Ajax函數嗎? –
這有幫助嗎? [http://pastebin.com/6B7kJp5T] formData()之上的東西;應該對你沒有意義;這只是我做的一些垃圾,以確保我擁有正確的文件。 – ocket8888
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?瞭解更多信息。
根據我的經驗,我們可能會更改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
我找到了答案,主要的原因是we shouldn't use controllers to manipulate DOM.
一句話document.getElementById("viewerjs_preview").contentDocument.location.reload(true)
不會在角範圍內工作了,所以你要一個指令去做。我認爲與你同樣的問題是and which's answer with most votes dose work well.
- 1. 刷新Iframe頁面加載
- 2. 在ajax POST後刷新iframe
- 3. 刷新GridView控件下載後像
- 4. 刷新JPanel後下載圖像
- 5. PHP後刷新提供下載
- 6. iMacros - iFrame(刷新/刷新)
- 7. 刷新iframe
- 8. 卸載刷新父頁上的IFrame
- 9. Ajax加載iframe而不刷新頁面
- 10. iframe fancybox關閉後刷新父窗口
- 11. 刷新後訪問iframe元素
- 12. Internet Explorer刷新iframe
- 13. 刷新多個iframe
- 14. iframe刷新主頁
- 15. JQuery Onload刷新iframe
- 16. 加載後刷新UITableView
- 17. Highcharts,負載然後刷新
- 18. 刷新JavaScript後加載ajax
- 19. 加載後刷新片段
- 20. 刷新頁面無需刷新iframe
- 21. 刷新iframe而不刷新父頁面
- 22. 從Azure下載BLOB
- 23. 如何在iframe中提交後刷新iframe父頁面?
- 24. TableView不重新加載/刷新後PopToRootViewController
- 25. IFrame:頁面回傳或刷新iframe src
- 26. 刷新的iframe的iframe中打開
- 27. 文件下載後Iframe onload不執行?
- 28. 加載<iframe>按下按鈕後
- 29. 如何刷新iframe網址?
- 30. 如何刷新tinymce iframe?
嗨,歡迎來到StackOverflow!那麼,你到目前爲止解決了什麼問題?你觀察到什麼確切的錯誤?請理解(http://stackoverflow.com/help/asking)StackOverflow不是一個提問「我該怎麼做?」的地方。 – astaykov