WebBrowser重新设置了内容后,怎么让他保持原来的连接有效?(300分)

  • 主题发起人 主题发起人 DreamTiger
  • 开始时间 开始时间
D

DreamTiger

Unregistered / Unconfirmed
GUEST, unregistred user!
用的是TEmbeddedWB,目的是想对正要浏览的网页内容作一些修改,
在WebBrowser1DocumentComplete中读取网页内容和重新赋值给网
页内容都没问题,但是问题是,重新赋值过的网页,他的baseurl
变成了about:break,导致原来网页上的所有相对联结,比如像:
<a href='abc.htm'>abc</a>实际上联结变成了about:blankabc.htm。
这个问题怎么解决?
 
把源程发出来
 
下面一段是希望在webbrowser读取文件完毕后,将其中的script弹出窗口直接用
href表示。

//从Stream中读取源码到IHtmlDocument2
procedure LoadDocumentSourceFromStream(Document: IDispatch;
Stream: TStream);
var
PersistStreamInit: IPersistStreamInit;
StreamAdapter: IStream;
begin
Stream.Position:= 0;

if Document.QueryInterface(IPersistStreamInit,
PersistStreamInit) = S_OK then
begin
StreamAdapter:= TStreamAdapter.Create(Stream, soReference);
PersistStreamInit.Load(StreamAdapter);
StreamAdapter:= nil;
end;
end;

function GetHtmlDocument(Document: IDispatch
var AString:String): Boolean;
var
StrStream:TStringStream;
begin
Result := false;

if Document <> nil then
begin
StrStream := TStringStream.Create('');
SaveDocumentSourceToStream(Document,StrStream);
AString := StrStream.DataString;
StrStream.Free;
result := true;
end;
end;

procedure TMainForm.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch
var URL: OleVariant);
var
tslSource: TStringList;
sText: string;
i, iPos1, iPos2, iBegin: integer;
sSongID: string;
bChanged: boolean;
const
sSign1: string = '<a href=''#'' onClick=''javascript:PopupWindow("Mp3_Music.asp?MusicID=';
sSign2: string = '","Mp3CD_List",468,300);'''' style=''TEXT-DECORATION: none''>></a></td>';
sReplaceSignBegin: string = '<a href=''Mp3_Music.asp?MusicID=';
sReplaceSignEnd: string = '''>></a></td>';
begin
if GetHtmlDocument(WebBrowser1.Document, sText) then
begin
tslSource := TStringList.Create;
try
bChanged := false;
tslSource.Text := sText;
for i := 0 to tslSource.Count - 1 do
begin
iPos1 := Pos(sSign1, tslSource);
iPos2 := Pos(sSign2, tslSource);
if (iPos1 > 0) and (iPos2 > 0) then
begin
bChanged := true;
iBegin := iPos1 + Length(sSign1);
sSongID := Copy(tslSource, iBegin, iPos2 - iBegin);
tslSource := Copy(tslSource, 1, iPos1 - 1) + sReplaceSignBegin + sSongID + sReplaceSignEnd;
end;
end;
if bChanged then
WebBrowser1.LoadFromStrings(tslSource);
finally
tslSource.Free;
end;
end;
end;
 
这不可能,如果可能的话那MS就要出新的Security PATCH了,
除非从底层改,直接改数据包
 
后退
顶部