1

我有一个创建 HTML 文件的 Delphi 程序。稍后,当按下按钮时,会创建一个 TWebBrowser 并且 WebBrowser.Navigate 会导致显示 html 页面。

无论如何设置WebBrowser“默认目录”所以它总是Delphi可执行文件的位置而不是HTML文件?

我不想将 HTML 中的 Base 值设置为硬编码值,因为当从另一个 Delphi exe 运行 HTML 时,找不到它们。

例如:

如果 exe 从 D:\data\delphi\pgm.exe 运行,则基本位置 D:\data\delphi\ 和 jpg 位于 D:\data\delphi\jpgs\

但如果 exe 从以下位置运行:C:\stuff\pgm.exe 我希望基本位置为 C:\stuff\,而 jpgs 位于 C:\stuff\jpgs\

所以我不能在 HTML 中用基本位置写一行,因为当它从另一个 exe 运行时,它会指向该 exe 的错误位置。

因此,我需要在创建网络浏览器时和阅读 HTML 之前设置基本位置,或者我需要一种方法将我可以设置基本位置的位置传递给网络浏览器。

很抱歉这么啰嗦,但我不知道如何看到我需要的东西。

4

2 回答 2

2

如果 HTML 文件与 JPG 存储在同一文件夹中,则无需设置基本路径。

HTML 文件的基本路径是加载它的路径,或者是通过<base href="...">标签在 HTML 本身中指定的路径。您可以设置一个新的基本路径,该路径可通过IHTMLDocument2.all.tags('base')集合访问,但只有在 HTML 文件首先加载和解析之后才能访问,这对您来说是一个 catch-22。如果没有事先加载文档,则无法设置基本路径。

于 2010-04-21T23:08:04.947 回答
1

由于 TWebBrowser 只是 Internet Explorer 引擎的包装器,如果您允许在浏览器中启用客户端脚本,则可以尝试另一种方法。

  1. 在您的应用程序中创建一个实现IDispatch 接口的自动化对象,并为其提供一个返回应用程序当前运行路径的字符串属性。
  2. 创建一个实现接口的自动化对象IDocHostUIHandler ,并覆盖其GetExternal() 方法以从#1 返回指向您的对象的指针。
  3. 检索浏览器的ICustomDoc 界面,并将您的IDocHostUIHandler 对象传递给它的SetUIHandler()方法。

有关详细信息,请参阅 MSDN:

http://msdn.microsoft.com/en-us/library/aa770041.aspx

这样,您的 HTML 可以包含可以使用该window.external对象检索应用程序路径并动态更新其 JPG 引用的脚本,例如在 OnLoad 事件中,即:

<script language="JScript">
function UpdateJPGs()
{
  var path = window.external.ExePath;
  document.images.item("jpg1").src = path + "1.jpg";
  document.images.item("jpg2").src = path + "2.jpg";
  // etc...
}
</script>

<body onLoad="UpdateJPGs">
于 2010-04-21T23:22:21.830 回答