【问题标题】:How to display html file from local folder inside an iframe?如何在 iframe 内显示本地文件夹中的 html 文件?
【发布时间】:2012-11-20 09:14:20
【问题描述】:

我尝试在 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 内。

我尝试的另一个解决方案是使用ajaxdiv 中显示html:

$("#DIV").html( *READ HTML TEXT FROM FILE *)

但这里的问题是我的html页面中包含图片和css文件,它们无法显示,因为当前位置是我的网站(它们包含在带有html的c:\temp文件夹中)。

有谁知道如何在iframe 中显示带有图像的 html 页面?

【问题讨论】:

  • 我会将它们从临时文件夹中移出并移到您的 Web 根目录中的文件夹中。如果服务器允许您以您尝试的方式访问和显示服务器上的任何文件,则会出现大量安全问题。
  • 嗨@AdrianThompsonPhillips,谢谢!我只能访问具有特殊权限的特定文件夹。我不能不从那里移动文件吗?
  • 为了分析起见,当您从 web 根目录而不是 temp 加载 html 文件时,它是否正常工作?

标签: c# javascript jquery asp.net iframe


【解决方案1】:

问题是浏览器将file:///c:\temp\a.html视为浏览器本地的文件,所以它指向访问者的C:盘。

您可以将该本地文件夹设置为您网站的虚拟目录(在 IIS 中),并使用正确的网络路径 (http://...) 引用该文件。这样您就不会移动文件夹,但它仍然可以通过网络服务器使用。

【讨论】:

    【解决方案2】:

    假设当您从根而不是 temp 加载 html 文件时它可以正常工作(因此,排除了除了文件位置问题之外的所有内容),只要您有权访问,您就可以加载相对于您的网站的文件。它确实需要了解您的路径 - 本地和服务器(如果适用)。例如,我在托管服务器上有一个名为“temp”的文件夹,它是我网站的 peer

    使用 Request.PhysicalApplicationPath,我发现我的网站位于我的主机上:“c:\inetpub\wwwroot\mydomain.com\index.htm”。因此我的临时文件夹和文件必须位于“c:\ 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 可能会带来一些其他挑战。我认为这不会出现任何跨域问题,但我不太确定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      相关资源
      最近更新 更多