动态更改WebBrowser数据流内容 (动态修改网页源码)
来源:互联网 发布:天刀帅气男捏脸数据 编辑:程序博客网 时间:2024/05/29 13:30
有时,由于软件的特殊需要,我们希望DELPHI在WebBrowser或embeddedwb里动态更改返回的数据内容,而这需要返回网页的所有原始源码,包括网页开始的DOCTYPE html PUBLIC声明部分,仅仅使用mshtml是无法实现的,需要用到数据流的方法。
具体执行方法如下(需要 uses mshtml,activex):
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
ms: TMemoryStream;
StrStream:TStringStream;
begin
//先读取到流中,暂存于memo1
if not Assigned(embeddedwb1.Document) then Exit;
ms := TMemoryStream.Create;
(embeddedwb1.Document as IPersistStreamInit).Save(TStreamAdapter.Create(ms), True);
ms.Position := 0;
Memo1.Lines.LoadFromStream(ms);
ms.Free;
//再从流中取出数据输出
s := memo1.text;
//执行替换部分代码
s:=StringReplace(s,'_blank','_self',[rfReplaceAll,rfIgnoreCase]);
StrStream:=TStringStream.Create(s);
try
StrStream.Position:=0;
(embeddedwb1.Document as IPersistStreamInit).Load(TStreamadapter.Create(StrStream));
finally
StrStream.Free;
end;
end;
通过以上转换,可以实现无损式的动态修改网页源码,保证css格式。
但存在一个问题,比如原始的网页的uri为 http://www.piaoyi.org,经过上面的数据流处理后,网页的url变成了 about:blank ,这就使得网页里采用相对路径的文件,如 images/piaoyi.gif 的路径发生了错误,即变成了 about:blankimages/piaoyi.gif ,明显这是路径错误。解决的方法,就是替换所有相对路径为绝对路径。方法就是再html代码前加上这么一句:<base href="http://www.piaoyi.org">
另外,还有一种方法可以动态的写入源码到 webbrowser 或 embeddedwb 里,如下:
procedure TForm11.Button1Click(Sender: TObject);
var
v:OleVariant;
HTMLDocument:ihtmldocument2;
begin
HTMLDocument := EmbeddedWB1.Document as IHTMLDocument2;
v := VarArrayCreate([0, 0], varVariant);
v[0] := '这里写入html代码';
HTMLDocument.Write(PSafeArray(TVarData(v).VArray));
HTMLDocument.Close;
end;
- 动态更改WebBrowser数据流内容 (动态修改网页源码)
- 动态的修改WebBrowser加载页面的内容
- Delphi动态的修改WebBrowser加载页面的内容
- Delphi动态的修改WebBrowser加载页面的内容
- webbrowser获取动态网页元素
- 获取WebView加载的网页内容并进行动态修改
- 动态修改ViewPager内容
- 爬取网页动态内容
- 取得WebBrowser网页内容
- JS动态修改表格内容
- table动态修改表格内容
- Extjs4 动态更改Store里面的内容
- MFC中使用ActiveX的WebBrowser载入动态网页
- 动态创建WebBrowser
- webbrowser动态创建
- WebBrowser动态创建
- insertAdjacentHTML可以动态插入网页内容
- 7、抓取动态网页的数据内容
- wicket 日期控件之应用
- ListBox脚本控制:项从一个ListBox移动到另一个ListBox
- 解决ORA-39166: Object CCXE.RR_JYRESEARCHREPORT was not found错误
- H264关于RTP协议的实现
- rfc3016:用于MPEG-4视听流的RTP负载格式
- 动态更改WebBrowser数据流内容 (动态修改网页源码)
- 用组策略来管理 SQL SERVER 2008 Auto Shrink database 上
- mac 配置环境变量
- 查看dll中导出量的命令
- adb command
- __dopostback() 缺少对象的诡异问题所在
- 逻辑地址、线性地址、物理地址和虚拟地址
- 原创排序算法与快速排序算法时间复杂度相同,但更易理解(C++语言实现)
- 解惑—Linux中的地址空间