Delphi TWebBrowser не отвечает на нажатия на гиперссылки на файлы - PullRequest
3 голосов
/ 26 апреля 2011

У меня есть компонент TWebBrowser (Delphi 7), и я загрузил HTML из потока памяти. HTML-код страницы загружен нормально, страница отображается правильно. Но когда я пытаюсь нажать на любую гиперссылку с адресами (значение атрибута href), например, «file: /// C: /dir/page.html», НИЧЕГО не происходит. Там нет сообщения об ошибке, и браузер не пытается перейти на другую страницу. URL-адрес правильный на 100% - когда я загружаю ту же веб-страницу в тот же экземпляр TWebBrowser, но из файла на жестком диске, а не из потока памяти, именно эта ссылка работает нормально. Есть идеи, что может быть не так?


Я пытался выполнить следующие операторы:

OleCheck(WebBrowser.SecurityManager.SetZoneMapping(URLZONE_INTRANET, 'about:blank', SZM_DELETE));
OleCheck(WebBrowser.SecurityManager.SetZoneMapping(URLZONE_TRUSTED, 'about:blank', SZM_DELETE));
OleCheck(WebBrowser.SecurityManager.SetZoneMapping(URLZONE_INTERNET, 'about:blank', SZM_DELETE));
OleCheck(WebBrowser.SecurityManager.SetZoneMapping(URLZONE_UNTRUSTED, 'about:blank', SZM_DELETE));
OleCheck(WebBrowser.SecurityManager.SetZoneMapping(URLZONE_LOCAL_MACHINE, 'about:blank', SZM_DELETE));
OleCheck(WebBrowser.SecurityManager.SetZoneMapping(URLZONE_LOCAL_MACHINE, 'about:blank', SZM_CREATE));

, но они ничего не изменили (они выполнялись правильно, без ошибок, то есть HRESULT = S_OK все время). Я должен сказать, что компонент на самом деле TEmbeddedWB (он имеет свойство SecurityManager), хотя TWebBrowser ведет себя так же - я только что проверил его.

Я думаю о том, чтобы прибегнуть к использованию файла во временном каталоге.


Спасибо всем, я наконец обошел проблему, используя файл в временном каталоге.

1 Ответ

1 голос
/ 28 апреля 2011

На ваш вопрос: Неправильно сам Internet Explorer

А именно, невозможно получить доступ к локальным файлам с веб-сайта, загруженного из другого места, кроме file: // location, без изменения настроек безопасности начиная с IE 7. Самый простой обходной путь, как вы уже упоминали, - открыть веб-сайт из файла: / / местоположение с вашего локального диска, и тогда вы получите этот доступ.

Вот несколько плачущих статей об этом:

Ссылка URI файла на локальную папку в IE7 не работает
http://blogs.msdn.com/b/freeassociations/archive/2005/05/19/420059.aspx
http://blogs.msdn.com/b/ie/archive/2005/08/15/452006.aspx

...