zoukankan      html  css  js  c++  java
  • 动态更改WebBrowser数据流内容

    动态更改WebBrowser数据流内容

     

        有时,由于软件的特殊需要,我们希望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;
     
  • 相关阅读:
    单元测试之block
    (转)CBCentralManager Class 的相关分析
    (转)iOS蓝牙调用的一般流程
    facebook pop 学习笔记
    GitHub 上值得关注学习的 iOS 开源项目
    关于block以及__bridge的一些笔记
    你的iOS静态库该减肥了
    iOS--消息推送后方法回调情况(简)
    UINavgation日常小bug-有兴趣的朋友可以看看
    UIDynamic(一)
  • 原文地址:https://www.cnblogs.com/honeynm/p/4169657.html
Copyright © 2011-2022 走看看