【问题标题】:Migration from wxHTML to wxWebView in wxWidgets在 wxWidgets 中从 wxHTML 迁移到 wxWebView
【发布时间】:2021-07-29 19:00:44
【问题描述】:

我正在尝试在 wxWidgets 中将 wxHTML 替换为 wxWebView。尝试获取单击的超链接的 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>

当我点击链接时,我想得到myURL 字符串。

更新 2:

myURL 可以是任意字符串,例如哈希

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

这不是像“http://www.google.com”这样的常用网址。

【问题讨论】:

  • 为什么您更改了控件并期望相同的行为?现在问题来了 - myURL 在两种情况下都一样吗?
  • 嗨@Igor,是的,'myURL' 在两种情况下都是相同的。开头只有“about:”。我正在替换,因为我需要更多 wxHTML 没有为我提供的功能。
  • 您没有回答我的第一个问题 - 为什么您希望 2 个不同事物的行为相同?
  • @Igor 我更新了问题。正如我所说,我需要在单击链接时获取myURL 字符串,但我不知道在 wxWebview 中获取它的另一种方式。
  • 什么是wx版本?操作系统? WebView 后端?你检查webview 样本了吗?

标签: c++ wxwidgets


【解决方案1】:

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

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

加载任意 URL,如

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

现在您必须重写 wxWebViewHandler 类。如下所示:

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 
    ) );
}
};

【讨论】:

    猜你喜欢
    • 2015-07-18
    • 1970-01-01
    • 2022-11-10
    • 2013-09-18
    • 2010-10-15
    • 2018-08-01
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多