Вниз
Скачать: CL | DM;

проблема с аттрибутом href в IE   Найти похожие ветки 

 
nikkie ©   (2004-02-27 04:30) [0]

имеется html с тегом типа <a href="d:\xxx.txt">.
IE показывает ссылку (в статусбаре и свойствах) как file:///d:/xxx.txt (именно три слеша после file: обратный слеш заменен на прямой)

тем не менее при клике на ссылку навигация осуществляется нормально и в адресной строке браузера имеем d:\xxx.txt

при обращении из javascript я получаю точно такой же file:///

при обращении из программы через IHTMLAnchorElement::get_href или IHTMLElement::getAttribute я получаю точно такой же file:///

для целей редактирования ссылки мне надо в программе получить ссылку в нормальном виде d:\xxx.txt

нет ли идей, как получить "правильное" значение href?


 
VMcL ©   (2004-02-27 11:37) [1]

>>nikkie ©  (27.02.04 04:30)

Наверное, придется:
if Pos("file:///", S) = 1 then Delete(S, 1, Length("file:///"));
+
StringReplace(S, "/", "\", ...)


 
nikkie ©   (2004-02-27 12:45) [2]

не хотелось бы...

на самом деле это не единственная проблема. в целом проблема в том, что если не указан явно протокол, то MSHTML пытается во-первых его угадать, во-вторых превратить relative пути в absolute.

например, если страница создана программно (адрес страницы about:blank), то ссылка типа href="ddd" превращается в "about:blankddd".

если загружена страница d:\text.htm, то ссылка href="www.ya.ru" превращается в "file:///D:/www.ya.ru"

от этой проблемы вроде бы помогает тег
<head><base href=""></base></head>
(благо в моей ситуации код страницы создаю я сам)

но где гарантия того, что я не пропустил еще какой-то хитрой обработки, которую производит IE над href? я ведь хочу простейшей вещи: то, что вколотил юзер, что я передал в put_href, что записалось в html - я хочу получить это обратно. убил бы тех, кто делает read-write свойство таким образом, что write возвращает не то, что было передано.

а пока мои мучения вот такие:
<html>
<head><base href=""></base></head>
<script language="JavaScript">
function real(anchor)
{
return (anchor.pathname+anchor.search)
}

function test()
{
 t1.value =
           a0.href+"\n"+
           a1.href+"\n"+
           a2.href+"\n"+
           a3.href+"\n"+
           a4.href+"\n"+
           a5.href+"\n";

 t2.value =
        real(a0)+"\n"+
        real(a1)+"\n"+
        real(a2)+"\n"+
        real(a3)+"\n"+
        real(a4)+"\n"+
        real(a5)+"\n";
}
</script>
<body onload=test()>

<a id="a0" href="www.ya.ru">aaaa</a>
<a id="a1" href="www.ya.ru:80">aaaa</a>
<a id="a2" href="http://www.ya.ru:80">aaaa</a>
<a id="a3" href="xxx.txt?aaa">aaaa</a>
<a id="a4" href="D:\xxx.txt?bbb">aaaa</a>
<a id="a5" href="file://D:\xxx.txt">aaaa</a>
<br>
<textarea id="t1" rows=10 cols=40></textarea>
<textarea id="t2" rows=10 cols=40></textarea>

</body></html>


 
nikkie ©   (2004-02-27 15:27) [3]

>что write возвращает не то, что было передано.
сорри, следует читать как
что read возвращает не то, что было передано.

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

идея 1. воспользоваться IDocHostUIHandler::TranslateUrl? кажется, он вызывается только при загрузке страницы, не подходит...
идея 2. воспользоваться IURLSearchHook::Translate? не нравится, что надо глобально регистрировать. опять же нет уверенности, что будет работать.
идея 3. поставить какой-нибудь Asynchronous Pluggable Protocol, MIME-фильтр или NameSpace handler? получится ли ловить этот url где-нибудь в IInternetProtocolInfo::ParseUrl?
идея 4. а каким образом осуществляется это дурацкое преобразование url? какие-нибудь moniker API? нет ли возможности сделать обратное преобразование? или перехватить вызов этого API в моем процессе?



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.021 c
14-1080798467
Аноним
2004-04-01 09:47
2004.04.25
Комплексные числа


4-1077785537
@ac
2004-02-26 11:52
2004.04.25
Как закрыть какое-либо стороннее приложение, зная его имя и папку


3-1080431371
Onward
2004-03-28 03:49
2004.04.25
Помогите с Delphi+BDE...


4-1077017998
Clift
2004-02-17 14:39
2004.04.25
LVM_GETITEMPOSITION


8-1073812436
Magician
2004-01-11 12:13
2004.04.25
Как используя компонент TMEDIAPLAYER масштабировать видео




   Наверх