如何从iframe中的本地文件夹显示html文件?
我尝试在iframe中显示html文件。如何从iframe中的本地文件夹显示html文件?
该html文件位于我的服务器上的本地文件夹内,具有相关权限(例如:c:\temp
)。
我想:
iframe = document.createElement("iframe");
iframe.src = "file:///c:\temp\a.html";
iframe.style.display = "block";
document.body.appendChild(iframe);
但iframe中不显示内容。
另一种解决办法我试过是使用ajax
显示div
里面的html:
$("#DIV").html(*READ HTML TEXT FROM FILE *)
但这里的问题是,我有图片和CSS文件中包含的HTML页面内,他们不能因为当前位置是我的网站(它们包含在带有html的c:\temp
文件夹中),因此可以显示它们。
有没有人有一个想法如何显示HTML页面的iframe
?
问题是,浏览器看到file:///c:\temp\a.html
作为浏览器本地文件,所以它指向访问者的C:驱动器。
您可以将本地文件夹设置为您网站的虚拟目录(在IIS中)并使用正确的Web路径(http:// ...)引用该文件。这样你不会移动文件夹,但它仍然可以通过网络服务器。
假设在从根目录加载html文件而不是temp(因此排除除文件位置的问题以外的所有内容)时它可以正常工作,只要有权访问,就可以加载相对于您网站的文件。它确实需要了解你的路径(如果适用的话) - 本地和服务器。例如,我在托管服务器上有一个名为“temp”的文件夹,它是我网站上的对等端。我发现我的网站位于我的主机上:“c:\ inetpub \ wwwroot \ mydomain.com \ index.htm”。因此我的临时文件夹&文件必须在“c:\ inetpub \ wwwroot \ mydomain.com \ index.htm” \ inetpub \ wwwroot \ temp \ myfile.txt“(同样,temp是我的网站的同行)。
原油例:
string _filePath, _uriServerName = "";
_filePath = Request.PhysicalApplicationPath;
_uriServerName = Request.ServerVariables["SERVER_NAME"].ToLower();
if (_uriServerName != "localhost")
{
int rootPos = _filePath.IndexOf("wwwroot"); //get position wwwroot
_filePath = _filePath.Substring(0, rootPos) + "temp\\myfile.txt";
}
我用上面的加载文件以外的网站。为此,它运作良好。但是,iframe可能会带来一些其他挑战。我不认为这应该提出任何跨域问题,但我并不完全确定。
我会将它们移出临时文件夹并放入Web根目录中的文件夹中。如果服务器允许您以您尝试的方式访问和显示服务器上的任何文件,则会有严重的安全问题。 –
嗨@AdrianThompsonPhillips,谢谢!我只能访问具有特殊权限的特定文件夹。我不能在没有移动文件的情况下做到这一点吗? – Inbal
为了分析起见,当你从web根加载html文件而不是temp时,它能正常工作吗? – puddleglum