2017-02-11 17 views
-1

У нас есть программа DelphiXE, которая создает HTML-документы с помощью TWebBrowser и сохраняет только их тела в базе данных sql.Как мы можем изменить атрибут src, чтобы иметь только относительные пути?

Теперь мы хотим добавить изображения в документы. Когда мы добавим изображение, то в атрибуте SRC мы имеем

src="file:///D:/Projects/Test/IMAGES/img_1.GIF" 

D:/Проекты/Тест является расположение программы и в HTML-файл.

Мы хотим иметь относительные пути в атрибуте SRC, поэтому, когда мы изменяем атрибут Src

s:=elem.outerHTML; 
s:='<IMG border=0 hspace=0 alt="pic 2" src="./IMAGES/955_2.GIF">'; 
// or s:='<IMG border=0 hspace=0 alt="pic 2" src="IMAGES/955_2.GIF">'; 
elem.outerHTML:=S 

затем SRC атрибут не меняется, он остается один и тот же

src="file:///D:/Projects/Test/images/Img_1.GIF" 

Мы установили базу dir в файле HTML с помощью Notepad до

<BASE href="D:\Projects\Test\"> 

не имеет успеха.

Как мы можем изменить атрибут src, чтобы иметь относительные пути?

+2

«Но мы делаем какие-либо изменения »:« Как ** точно ** вы делаете изменения, о которых вы просите? Для этого требуется MCVE (http://stackoverflow.com/help/mcve). Читателям не нужно угадывать эту деталь. – MartynA

+1

В этом случае ваш код должен быть в q, а не в комментарии. Пожалуйста, отредактируйте свой q. – MartynA

ответ

1

Предполагая следующий HTML:

<body> 
    <img border=0 alt="pic 2" src="file:///D:/Projects/Test/IMAGES/img_1.GIF"> 
    <p>Hello World</p> 
</body> 

И если предположить, это было загружено в экземпляр компонента TWebBrowser называется WebBrowser1,

использование SetAttribute вместо outerHTML следующим образом:

var 
    Body : IHTMLElement; 
    Children: IHTMLElementCollection; 
    Element : IHTMLElement; 

begin 
    Body := (WebBrowser1.Document as IHTMLDocument2).body; 
    Children := Body.children as IHTMLElementCollection; 
    Element := Children.item(0, 0) as IHTMLElement; 
    Element.setAttribute('src', './img_1.GIF', 0); 

    // To prove a point: 
    ShowMessage(Element.outerHTML); 
end;