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;
     
  • 相关阅读:
    How to create jar for Android Library Project
    Very large tabs in eclipse panes on Ubuntu
    64bit Ubuntu, Android AAPT, R.java
    Linux(Ubuntu)下如何安装JDK
    Configure xterm Fonts and Colors for Your Eyeball
    建立、配置和使用Activity——启动其他Activity并返回结果
    建立、配置和使用Activity——使用Bundle在Activity之间交换数据
    建立、配置和使用Activity——启动、关闭Activity
    建立、配置和使用Activity——Activity
    异步任务(AsyncTask)
  • 原文地址:https://www.cnblogs.com/honeynm/p/4169657.html
Copyright © 2011-2022 走看看