我有一个创建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浏览器传递到我可以设置基本位置的位置。
很抱歉这么啰嗦,但我无法弄清楚如何看到我需要的东西。
答案 0 :(得分:1)
如果HTML文件存储在与JPG相同的文件夹中,则无需设置基本路径。
HTML文件的基本路径是加载它的路径,或者是通过<base href="...">
标记在HTML本身中指定的路径。您可以设置一个新的基本路径,可以通过IHTMLDocument2.all.tags('base')
集合访问,但是在HTML文件首次加载和解析之后才能访问它,这对您来说是一个catch-22。如果没有预先加载文档,则无法设置基本路径。
答案 1 :(得分:1)
由于TWebBrowser只是Internet Explorer引擎的一个包装器,如果您允许在浏览器中启用客户端脚本,则可以尝试其他方法。
IDispatch
的应用
接口,并给它一个字符串
返回应用程序的属性
当前的运行路径。IDocHostUIHandler
接口,并覆盖其GetExternal()
返回指针的方法
来自#1的对象。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">