Javascript 下载blob后刷新iframe

Javascript 下载blob后刷新iframe,javascript,php,ajax,angularjs,azure,Javascript,Php,Ajax,Angularjs,Azure,我的服务器上有一个文件浏览器,它使用Azure存储来存储文件。该网站有一个功能,当你点击一个文件时,它会弹出一个详细信息窗口。我使用ViewerJS来显示文件的pdf预览(如果适用的话),而且效果非常好。唯一的问题是,在下载预览文件时,必须手动重新加载预览iframe以使其显示。相关的php函数是: 当这个函数完成时,我使用的是ajax,$.done函数调用 response=JSON&&JSON.parseresponse | | jQuery.parseJSONresponse; $scop

我的服务器上有一个文件浏览器,它使用Azure存储来存储文件。该网站有一个功能,当你点击一个文件时,它会弹出一个详细信息窗口。我使用ViewerJS来显示文件的pdf预览(如果适用的话),而且效果非常好。唯一的问题是,在下载预览文件时,必须手动重新加载预览iframe以使其显示。相关的php函数是: 当这个函数完成时,我使用的是ajax,$.done函数调用 response=JSON&&JSON.parseresponse | | jQuery.parseJSONresponse; $scope.pdfthingy=响应;document.getElementByIdviewerjs_preview.contentDocument.location.reloadtrue; 其中,第一行上的响应设置为pdf预览文件的完整路径名,viewerjs_preview是相关iframe的id。
出于某种原因,这不起作用,iframe也没有重新加载自身。当blob完成下载并且设置了pdfthingy时,我如何使其完成下载?

iframe的域是否与主机网站的域相同?否则,我们将无法在宿主网站的JavaScript代码中访问其contentDocument或contentWindow

要刷新iframe,根据我的理解,您可以设置其src:

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

请注意,如果src包含哈希标记,我们可能需要额外的工作。我建议您查看更多信息。

根据我的经验,我们可能更改了IFrame URL,但IFrame显示了预览内容。在这个场景中,我建议您可以创建IFarme动态。例如,当您从Azure存储获取Blob URI时,您可以尝试删除Iframe并创建新的。例如,如果预览内容在iframe中显示为:

<iframe id="viewerjs_preview" src = "/ViewerJS/#../azure blob storage url /pre-blobname .pdf " width='400' height='300' allowfullscreen webkitallowfullscreen></iframe> 
此外,您还可以尝试MingXu关于如何刷新/重新加载Iframe的参考

问候,,
比尔:我想我的问题可能不清楚,为此我道歉。明天我会试着回去编辑它。 对我来说,解决方案是直接使用 document.getElementByIdiframe-id.src=/path\u其中放置了\u文件/文件名 作为参考,我使用pdfthingy存储下载blob的ajax调用返回的文件名。 这防止了iframe在设置文件名之前加载空源。
这也许是walkformusle说不应该以这种方式控制DOM的部分原因。

我找到了答案,主要原因是


类似document.getElementByIdviewerjs_preview.contentDocument.location.reloadtrue这样的句子在角度范围内将不再起作用,因此必须有一个指令才能执行。我想和你一样的问题是

嗨,欢迎来到StackOverflow!那么,到目前为止,你试图解决什么问题?你观察到的确切错误是什么?请理解StackOverflow不是一个可以问问题的地方,我该怎么做…?。你能用anguar展示Ajax函数的更完整部分吗?这有帮助吗?[formData上面的内容;对你来说不应该有意义;这只是我为了确保我有正确的文件而做的一些垃圾。
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);

        }