web浏览器和OLECMDID_SELECTALL(WebBrowser and OLECMDID_

2019-09-22 16:34发布

当我打开使用谷歌的网页:

WebBrowser1.Navigate('http://www.google.com.au/advanced_search?hl=en');

它用光标在编辑框中打开。
所以,当我使用:

WebBrowser1.ExecWB(OLECMDID_SELECTALL,OLECMDEXECOPT_PROMPTUSER,vaIn, vaOut);

它仅复制光标所在。 不是整个网页,这是我想要复制的内容。 我的代码是:

procedure Pause()
begin
//code to pause until page loads.
end;

procedure TForm2.Button22Click(Sender: TObject);
var s:String;
    vaIn, vaOut: OleVariant;
begin
    s:='http://www.google.com.au/advanced_search?hl=en';
    WebBrowser1.Navigate(s);
    while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do
      begin
          Pause(1000);
      end;
//------->I need to put code here so the SELECTALL line of code works.<----------
//------->So the cursor isn't in to editbox but as if it has clicked  <---------- 
//------->the webpage                                                 <----------
    WebBrowser1.ExecWB(OLECMDID_SELECTALL,OLECMDEXECOPT_PROMPTUSER,vaIn, vaOut);
end;

如何选择整个网页?

Answer 1:

尝试聚焦体选择所有之前:

((WebBrowser1.Document as IHTMLDocument2).body as IHTMLElement2).focus();
WebBrowser1.ExecWB(OLECMDID_SELECTALL, OLECMDEXECOPT_PROMPTUSER, vaIn, vaOut);

随着中说一个更好的办法是使用document.body.innerText抢文本,而不是模拟选择/复制像你一样。



Answer 2:

http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvc/thread/eef2f809-cadf-44a3-956e-e75925a4b85e提出明确的方式进行复制前选择所有。 通过这种方式直接作用,只有当页面有没有帧(谷歌高级具有Iframe和IHTMLBodyElement.CreateTextRange失败)

但是后期绑定的代码是一样,在XE2 / Win7x64 / IE9的工作原理:

procedure TForm2.btn2Click(Sender: TObject);
var HTML_Doc, oRange: OleVariant;
begin
  HTML_Doc := WebBrowser1.Document;
  oRange := HTML_Doc.body.createTextRange;
  oRange.select();

  WB_Copy(webbrowser1);
end;

WBCopy从WBFunks单元拍摄http://codingrus.ru/readarticle.php?article_id=721和归结为ExecWB呼叫与OLECMDID_COPY,OLECMDEXECOPT_DODEFAULT参数。



文章来源: WebBrowser and OLECMDID_SELECTALL