Форум: "Сети";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Внизпроблема с аттрибутом 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 вся ветка
Форум: "Сети";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.031 c