Как установить каталог Delphi WebBrowser Base отличным от HTML-местоположения - PullRequest
1 голос
/ 22 апреля 2010

У меня есть программа 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 с базовым местоположением, так как при запуске из другого exe-файла он будет указывать на неправильное местоположение для этого exe.

Так что мне нужно либо установить базовое местоположение при создании веб-браузера и перед тем, как я прочту HTML, либо мне нужен способ передать в веб-браузер местоположение, где я могу затем установить базовое местоположение.

Извините, что так скучен, но я не мог понять, как увидеть то, что мне нужно.

Ответы [ 2 ]

1 голос
/ 22 апреля 2010

Поскольку 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">
1 голос
/ 22 апреля 2010

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

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

...