Как установить каталог 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, есть альтернатива, которую вы можете попробовать, если разрешите в своем браузере включать сценарии на стороне клиента.

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

Если файл HTML хранится в той же папке, что и файлы JPG, то нет необходимости устанавливать базовый путь.

Базовый путь файла HTML - это путь, из которого он загружен, или путь, указанный в самом HTML через <base href="..."> тег. Вы можете установить новый базовый путь, который доступен через IHTMLDocument2.all.tags('base') коллекции, но она недоступна до тех пор, пока HTML-файл не будет загружен и проанализирован первым, что является уловкой-22 для вас. Вы не можете установить базовый путь без предварительной загрузки документа.

Другие вопросы по тегам