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
) );
}
};
我正在尝试替换 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
) );
}
};