【问题标题】:How to set Delphi WebBrowser Base directory different that HTML location如何设置与 HTML 位置不同的 Delphi WebBrowser Base 目录
【发布时间】:2010-04-21 21:41:51
【问题描述】:

我有一个创建 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\,而 jpg 位于 C:\stuff\jpgs\

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

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

对不起,我啰嗦了这么多,但我不知道如何看到我需要的东西。

【问题讨论】:

  • 我不明白“默认目录”会为您做什么。如果您的程序使用相对路径生成 HTML 文件,那么您不需要做任何事情。不要生成<img href="D:\data\delphi\jpgs\logo.jpg">,而是生成<img href="jpgs/logo.jpg">。那你就完全不用搞基地了。
  • JPG 是与创建 html 的 exe 位于同一位置的目录,而不是 html 所在的位置。然后,当同一个应用程序从另一个位置(不同的用户)运行时,第一个用户编写的 html 中 jpg 的位置可能不适用于新用户(他有自己的 jpg 副本。我知道很困惑跨度>

标签: delphi twebbrowser


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

由于 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">

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多