我怎么参考了当地资源产生HTML在它的网页浏览器控制?
-
09-06-2019 - |
题
我使用它的网页浏览器控器显示有些内容在一个窗户的形式应用程序。我使用的DocumentText酒店写所产生HTML。这部分是工作壮观。现在我要用一些图像的标记。(我还会喜欢使用联CSS和JavaScript,但是,可以解决的只是嵌入。)
我已经google搜索过去的几天和不能似乎找到答案的标题问题。
我试图使用相对于参考:该应用程序exe是在bin\调试。图像生活在的"图像"目录的根源的项目。我已经设置的图像以复制到输出的目录编制的,所以它们最终在bin\debug\图*.所以我然后使用的参考样本"图像..."思想,它将相对于exe。然而,当我看到的图像的性质在嵌入式浏览器窗口,我看到的影像链接将"关于:blankImages/*".一切都似乎是相对于"有关:空白"当HTML写的控制。缺乏一个位置上,我不能找出使用相对文件的资源参考。
我戳周围的性质控制,以查看是否有一种方式设置一些东西来解决这个问题。我创建了一个空白html网页,并指浏览器在它使用的"导航()"方法,采用完全的当地道路的文件。这个工作很好用浏览器报告的地方"file:///..."路径的空白页。然后,我再次写信给浏览器,这个时使用的文件。Write().再次,浏览器现在的报告"有关:空白"的网址。
短的写作的动态HTML结果的一个真实的文件,没有其他办法可以参考的文件资源?
我要试试最后一件事:构建的绝对文件路径图像和书写的那些要HTML。我HTML正在产生的使用XSL转换的化对象的XML因此,我将需要发挥与一些XSL参数,这将需要一些额外时间,因为我不熟悉他们的。
解决方案
我们这么做,虽然我应该提及的是,我们使用定制网浏览器来去除这样的事情的能力右击并看到美好的旧即上下文的菜单:
public class HtmlFormatter
{
/// <summary>
/// Indicator that this is a URI referencing the local
/// file path.
/// </summary>
public static readonly string FILE_URL_PREFIX =
"file://";
/// <summary>
/// The path separator for HTML paths.
/// </summary>
public const string PATH_SEPARATOR = "/";
}
// We need to add the proper paths to each image source
// designation that match where they are being placed on disk.
String html = HtmlFormatter.ReplaceImagePath(
myHtml,
HtmlFormatter.FILE_URL_PREFIX + ApplicationPath.FullAppPath +
HtmlFormatter.PATH_SEPARATOR);
基本上,你需要有一个路径图像,有一个文件URI,例如
<img src="file://ApplicationPath/images/myImage.gif">
其他提示
我得到了它想通了。
我只是通过完成解决url exe目录XSL变换,其中包含HTML输出与图像标签:
XsltArgumentList lstArgs = new XsltArgumentList();
lstArgs.AddParam("absoluteRoot", string.Empty, Path.GetFullPath("."));
然后我作为前缀的所有图像用的参数值:
<img src="{$absoluteRoot}/Images/SilkIcons/comment_add.gif" align="middle" border="0" />
我最终使用的东西基本上是相同的,为什么肯的建议。然而,不是手动追加的文件的前缀,我用UriBuilder类建立完整的URI与"文件"的协议。
这也解决了一个后续问题时,我们测试的应用程序在一个更实际的位置,程序文件。空间物编码,但操作系统不能处理的字符编码文件时所引用的使用标准的系统道路(即"C:\Program%20Files...").使用的真实URI值(file:///C:/程序文件/...)的工作。
或者,保持正常的风格相链接,降HTML转型代码,而不是嵌入一个C#网服务器喜欢 此 在你exe,然后点你件网络控件在您的内部网址,喜欢localhost:8199/myapp/
Ken的代码丢一些东西,它需要的工作。我已经修订,并创建了一个新的方法,该方法应该自动化的东西一点。
只是叫静态的方法,以便:
html = HtmlFormatter.ReplaceImagePathAuto(html);
和所有链接在html匹配的文件://ApplicationPath/将交换当前的工作目录。如果你想要指定另一个位置,原静态的方法包括(加的位,这是缺失)。
public class HtmlFormatter
{
public static readonly string FILE_URL_PREFIX = "file://";
public static readonly string PATH_SEPARATOR = "/";
public static String ReplaceImagePath(String html, String path)
{
return html.Replace("file://ApplicationPath/", path);
}
/// <summary>
/// Replaces URLs matching file://ApplicationPath/... with Executable Path
/// </summary>
/// <param name="html"></param>
/// <returns></returns>
public static String ReplaceImagePathAuto(String html)
{
String executableName = System.Windows.Forms.Application.ExecutablePath;
System.IO.FileInfo executableFileInfo = new System.IO.FileInfo(executableName);
String executableDirectoryName = executableFileInfo.DirectoryName;
String replaceWith = HtmlFormatter.FILE_URL_PREFIX
+ executableDirectoryName
+ HtmlFormatter.PATH_SEPARATOR;
return ReplaceImagePath(html, replaceWith);
}
}