0

我在这里搜索 SO,但没有成功或任何可接受的答案。

我有更大的应用程序,它正在使用 TEmbeddedWB。可以说我的代码是这样的:

// here is some other code where I am working with EmbeddedWB1

EmbeddedWB1.Navigate2('http://www.stackoverflow.com');

while EmbeddedWB1.ReadyState <> READYSTATE_COMPLETE do
begin
  EmbeddedWB1.Stop;
  Application.ProcessMessages;
end;

EmbeddedWB1.Navigate2('http://www.google.com');

这段代码被困在那个循环中。

调试时,EmbeddedWB1.ReadyState = READYSTATE_LOADING.

有人可以告诉我,如何绝对停止加载页面,然后继续下一个导航?

非常感谢。

PS:没有那个循环,它可以正常加载另一个页面,fe google.com。但我真的需要READYSTATE_COMPLETE在加载另一个页面之前将其放入。

4

1 回答 1

1

它没有退出循环,因为您明确告诉它在 is 之前不要这样做ReadyStateREADYSTATE_COMPLETE然后调用Stop它以使其永远无法到达 that ReadyState

遵循逻辑:

  • 我标记为{ 1 }“保持循环,直到 ReadyState 为 READYSTATE_COMPLETE”的行。
  • 我标记为{ 2 }“停止加载页面”的行,这意味着ReadyState永远不能READYSTATE_COMPLETE
    // 这行说“保持循环,直到我们到达 READYSTATE_COMPLETE
    而 EmbeddedWB1.ReadyState READYSTATE_COMPLETE 做 { 1 }
    开始
      EmbeddedWB1.Stop;{ 2 }
      Application.ProcessMessages;
    结尾;

你故意阻止你的循环退出。

如果您想真正停止加载页面并退出循环,请放入计数器或计时器,并在循环中添加条件以允许您在满足条件时退出:

Counter := 1;
while (Counter < SomeValue) and (EmbeddedWB1.ReadyState <> READYSTATE_COMPLETE) do
begin
  Inc(Counter);
  Application.ProcessMessages;
end;

if Counter >= SomeValue then
  EmbeddedWB1.Stop;   // Had to break the loop above before complete. 
                      // trying to load and move on.
于 2013-12-05T23:02:27.123 回答