wxWidgets中从wxHTML迁移到wxWebView

Migration from wxHTML to wxWebView in wxWidgets

我正在尝试替换 wxWidgets 中的 wxHTML with wxWebView。我在尝试获取已单击的 hyperlink 的 URL 时遇到问题。 以前的代码是这样的:

void mywxHtmlWindow::OnLinkClicked( const wxHtmlLinkInfo& link )
{
    ...
    link.GetHref();
    ...
}

现在我有:

void OnLinkClicked( wxWebViewEvent& evt )
   {
     ...
     evt.GetURL();
     ...
   }

之前的结果是"myURL",现在的结果是"about:myURL",不知道为什么开头是"about:"。我应该怎么做才能得到和以前一样的结果?

更新:

我在两种情况下都设置了页面源,如下所示:

mBrowser->SetPage( currentPage_, wxString() );

页面源中的所有标签都是这样的:

<a href="myURL">clickHere</a>

我想在单击 link 时获得 myURL 字符串。

更新 2:

myURL 可以是任意字符串,例如散列

(e.g. myURL="git-c2b617b1ec4bbaba2201020ec946b037f5935b77").

这不是像“http://www.google.com”这样的常见 URL。

当您手动设置页面源时,Internet Explorer 的默认方案是 about。因此,我没有使用 setPage 函数,而是注册了一个自定义方案(例如 myScheme),例如

  mBrowser->RegisterHandler( wxSharedPtr<wxWebViewHandler>( new WxHtmlFSHandler( "myScheme" ) ) );

加载任意URL喜欢

myBrowser->LoadURL( "myScheme:URL.com" );

现在您必须覆盖 wxWebViewHandler class。如下所示:

struct WxHtmlFSHandler : public wxWebViewHandler
{
  WxHtmlFSHandler( const wxString& scheme ): wxWebViewHandler( scheme )
  { }

  wxFSFile* GetFile( const wxString& uri ) override
  {
    return ( new wxFSFile( new wxMemoryInputStream( currentPage_.data(), 
    currentPage_.size() ),
    uri, wxT( "text/html" ), currentAnchor_
    #if wxUSE_DATETIME
    , wxDateTime::Now()
    #endif 
    ) );
}
};