如何设置Delphi WebBrowser Base目录与HTML位置不同

时间:2010-04-21 21:41:51

标签: delphi twebbrowser

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

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

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

例如:

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

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

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

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

很抱歉这么啰嗦,但我无法弄清楚如何看到我需要的东西。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

  1. 在您的帐户中创建一个Automation对象 实现IDispatch的应用 接口,并给它一个字符串 返回应用程序的属性 当前的运行路径。
  2. 创建一个Automation对象 实现IDocHostUIHandler 接口,并覆盖其GetExternal() 返回指针的方法 来自#1的对象。
  3. 检索浏览器的ICustomDoc 界面,并通过你的IDocHostUIHandler 反对其SetUIHandler()方法。
  4. 有关详细信息,请参阅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">