乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      delphi中Webbrowser疑難問題集錦

       aaie_ 2011-11-21
      1.獲得網(wǎng)頁中變量值
          htm中<script> var currID=123</script>
          程序中可以這么調(diào)用 id := Form1.WebBrowser1.OleObject.Document.script.currID
          值得說明的是,變量可以是javascript定義的,也可以是vbscript定義的,如果Webbrowser1中找不到該變量,調(diào)用會觸發(fā)一個異常事件,即變量currID不存在

      2.執(zhí)行網(wǎng)頁中的函數(shù)
          tmp := 'currID = getNextID(currID)'+#13#10;
          Form1.WebBrowser1.OleObject.Document.parentWindow.execScript(tmp,'JavaScript');
         調(diào)用函數(shù)的方法就是execScript接口,同樣,如果函數(shù)不存在,或者運行錯誤也會觸發(fā)腳本錯誤異常

      3.設(shè)置網(wǎng)頁背景
          背景圖片 WebBrowser1.OleObject.Document.body.background   := 'http:///bg.gif'
          背景顏色 WebBrowser1.OleObject.Document.body.bgcolor   := '#eeeeee'

      4.調(diào)用網(wǎng)頁中已知對象
          src := WebBrowser1.OleObject.Document.getElementByID('img1').src
           該方法其實就是javascript中的 getElementByID  

      5.獲取頁面中所有的frame
          使用DHTML。
          frames:=wb.OleObject.document.frames;
          for i:=0 to frames.length do
          memo1.lines.Add(frames[i].document.body.innerHTML);
      6.BorderStyle=bsNone后Webbrowser會被重新初始化
          這是一個讓人很意外的一個問題,Delphi在窗口控件的控制方面做得非常好,很少出現(xiàn)這種BUG
          根據(jù)分析,出現(xiàn)這個現(xiàn)象有很多情況 改變FormStyle也會出現(xiàn) ; 如果 webbrowser.parent 由panel1 改到panel2.也會導(dǎo)致webbrowser重新
      初始化。

      7.直接向Webbrowser中寫入html代碼,不需要Navigate到實際存在的文件
          var
         StrStream:TStringStream;
         SetNoteStr: string;
          begin
      SetNoteStr :='<body bgcolor=222222 align=center><br><p align=center><font size=+2 color=#FFFFFF>點點博客 http://</font></p>';
      SetNoteStr :=SetNoteStr+'<br><p align=center><font size=+2 color=#FFFFFF>點擊左邊按鈕可查看對應(yīng)圖片</font></p>';
      StrStream:=TStringStream.Create(SetNoteStr);
      WebBrowser1.Navigate('about:blank');
      try
          StrStream.Position:=0;
          ( WebBrowser1.Document as IPersistStreamInit).Load(TStreamadapter.Create(StrStream));
      finally
          StrStream.Free;
      end;

      8.前進,后退,刷新
         self.WebBrowser1.GoBack
         self.WebBrowser1.GoForward
          self.WebBrowser1.Refresh

      9.捕捉NewWindow2事件,即新開窗口事件
         procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
      var ppDisp: IDispatch; var Cancel: WordBool);
      var
      NewWindow: TForm2;
      begin
      //exit;
      NewWindow:= TForm2.Create(nil);
      NewWindow.Show;
      ppDisp:= NewWindow.Webbrowser1.DefaultDispatch;
      end;
      值得一題的是該方法不能獲得新開窗口的URL,退一步的方法只能是等到在新的Webbrowser中觸發(fā)BeforeNavigate2事件判斷了

      10.網(wǎng)頁中存在iframe時判斷頁面是否下載結(jié)束
           procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
      begin
         if WebBrowser1.Application = pDisp then showmessage('頁面已全部下載完畢')
      end;
         說明一下,每個iframe下載完畢都會觸發(fā)DocumentComplete事件,所以一個頁面在真正下載完畢前可能被觸發(fā)多次
         WB是否下載結(jié)束大致分兩種情況:第一,html代碼已經(jīng)全部下載到客戶端,一些圖片類的資源尚未下載;第二,頁面中所有資源下載完畢包括iframe嵌套方式都下載完畢.目前判斷第一種情況用此方法即可.第二種情況的判斷似乎很難寫出一個通用的方法來,目前采用的多數(shù)是超時即止

      11. 給Webbrowser設(shè)置引用頁,Cookie
      procedure TForm1.Button1Click(Sender: TObject);
      var
      Flags, Headers, TargetFrameName, PostData: OLEVariant;
      Url, Ref, Cookie: string;
      begin
      Url := 'http://www./';
      Ref := 'http://www.baidu.com/';
      Cookie := 'ASPSESSIONIDSSSDDTRQ=MJACEGMBHBCFPBDGCDPKPMIK; virtualwall=vsid=8ff85557fc669bc6f722a5db526e70bf';
      Headers := 'Referer: ' + Ref + #10#13;
      Headers := 'Cookie: '+Cookie+#13#10;
      Webbrowser1.Navigate(Url, Flags, TargetFrameName, PostData, Headers);
      end;

      繼續(xù)完善中...

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多