【问题标题】:c++ WebBrowser block urlc ++ WebBrowser块url
【发布时间】:2019-02-21 16:03:09
【问题描述】:

如何在 C++Builder 中阻止 TWebBrowser 中的任何 URL?

我尝试了这段代码,但它没有按我预期的方式工作。

void __fastcall TForm1::WebBrowser1BeforeNavigate2(TObject *ASender, const IDispatch *pDisp,
          const OleVariant &URL, const OleVariant &Flags, const OleVariant &TargetFrameName,
          const OleVariant &PostData, const OleVariant &Headers,
          WordBool &Cancel)
{
    if (URL.operator UnicodeString() == запрещенный_адрес)
        WebBrowser1->Stop();
}

【问题讨论】:

  • 该代码能编译吗?它看起来根本不像有效的 c++。
  • 是的,他编译
  • 那么“запрещенный_адрес”是如何声明的?
  • 没办法。 “запрещенный_адрес”它的UnicodeString。例如 if (URL.operator UnicodeString() == "youtube.com")
  • 你的代码里面没有 "

标签: c++ c++builder twebbrowser


【解决方案1】:

запрещенный_адрес 不是 URL。您必须根据需要检查完整 URL,包括http:https: 前缀。

另外,仅仅调用Stop()是不够的,还需要将事件处理器的Cancel参数设置为true。

void __fastcall TForm1::WebBrowser1BeforeNavigate2(TObject *ASender, const IDispatch *pDisp,
    const OleVariant &URL, const OleVariant &Flags, const OleVariant &TargetFrameName,
    const OleVariant &PostData, const OleVariant &Headers,
    WordBool &Cancel)
{
    System::String sUrl = URL;
    if (sUrl == _D("http://the full url here"))
    {
        Cancel = VARIANT_TRUE;
        WebBrowser1->Stop();
    }
}

【讨论】:

  • 我使用它时效果很好。
  • 将它们放在一个列表中,然后检查URL 是否在该列表中。这超出了这个问题的范围。如果您需要帮助来解决这个问题,请发布一个关于它的新问题。
猜你喜欢
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
  • 2012-02-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-11
  • 1970-01-01
  • 2013-04-29
相关资源
最近更新 更多