Как установить каталог Delphi WebBrowser Base отличным от HTML-местоположения
У меня есть программа Delphi, которая создает файлы HTML. Позже, когда нажимается кнопка, создается TWebBrowser и WebBrowser.Navigate вызывает отображение HTML-страницы.
Можно ли в любом случае установить WebBrowser "каталог по умолчанию", чтобы он всегда был местом расположения исполняемого файла Delphi, а не файла HTML?
Я не хочу устанавливать базовое значение в HTML равным жестко заданному значению, потому что тогда, когда HTML запускается из другого exe-файла Delphi, они не обнаруживаются.
например:
если исполняемый файл запускается из 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 с базовым местоположением, поскольку, когда он запускается из другого исполняемого файла, он будет указывать на неправильное местоположение для этого исполняемого файла.
Поэтому мне нужно либо указать базовое местоположение, когда я создаю веб-браузер, и до того, как я прочту HTML, либо мне нужен способ передать в веб-браузер место, где я могу затем установить базовое местоположение.
Извините за то, что я так многословен, но я не мог понять, как увидеть то, что мне нужно.
2 ответа
Поскольку 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">
Если файл HTML хранится в той же папке, что и файлы JPG, то нет необходимости устанавливать базовый путь.
Базовый путь файла HTML - это путь, из которого он загружен, или путь, указанный в самом HTML через <base href="...">
тег. Вы можете установить новый базовый путь, который доступен через IHTMLDocument2.all.tags('base')
коллекции, но она недоступна до тех пор, пока HTML-файл не будет загружен и проанализирован первым, что является уловкой-22 для вас. Вы не можете установить базовый путь без предварительной загрузки документа.