【问题标题】:Unable to use Find with CHtmlView and URLs that have anchors无法将查找与 CHtmlView 和具有锚点的 URL 一起使用
【发布时间】:2022-01-06 14:49:06
【问题描述】:

我被这个难倒了!

我有自己的CHtmlView 派生类,并且我最近添加了对Find 的支持。我是这样做的:

void CChristianLifeMinistryEditorDlg::OnEditFind()
{
    m_pHtmlPreview->ExecWB(OLECMDID_FIND, OLECMDEXECOPT_PROMPTUSER, nullptr, nullptr);
}

在后台,代码会执行以下操作:

HRESULT CChristianLifeMinistryHtmlView::ExecWB(OLECMDID cmdID, OLECMDEXECOPT cmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
{
    ASSERT(m_pBrowserApp != nullptr);

    const auto hr = m_pBrowserApp->ExecWB(cmdID, cmdexecopt, pvaIn, pvaOut);
    return hr;
}

它工作正常。但前提是我在浏览器控件中以这种方式呈现我的页面:

if (m_pHtmlPreview != nullptr)
{
    CString strURL = strPreviewXML;
    if (iBookmarkId != -1)
        strURL.Format(_T("%s#week%d"), (LPCTSTR)strPreviewXML, iBookmarkId);

    m_pHtmlPreview->Navigate2(strPreviewXML, 0, nullptr);
    //m_pHtmlPreview->Navigate2(strURL, 0, nullptr);
}

简而言之,如果我导航到 XML 文件本身,那么结果就会起作用。但是,如果我尝试导航到同一个 XMl 文件,但使用我的锚点,当它显示在浏览器控件的正确位置时,查找功能将不起作用:

当我把它改回导航到:

m_pHtmlPreview->Navigate2(strPreviewXML, 0, nullptr);

然后保证查找工具工作。但这意味着我不能再跳转到转换后的 HTML 输出的正确部分。我试着做:

m_pHtmlPreview->Navigate2(strPreviewXML, 0, nullptr);
m_pHtmlPreview->Navigate2(strURL, 0, nullptr);

我认为如果我先导航到页面,然后导航到带有锚点的页面,那么 Find 会起作用。但没有喜悦。有什么办法吗?

【问题讨论】:

    标签: url visual-c++ mfc find webbrowser-control


    【解决方案1】:

    当您尝试导航到在 URL 中有书签的 XML 文件时,查找功能的机制似乎不喜欢它。

    我已经有了将 XML 转换为 HTMl 的代码,所以我将其添加为第二步:

    if (m_pHtmlPreview != nullptr)
    {
        CString strURL = strPreviewXML;
        //if (iBookmarkId != -1)
        //  strURL.Format(_T("%s#week%d"), (LPCTSTR)strPreviewXML, iBookmarkId);
    
        //m_pHtmlPreview->Navigate2(strPreviewXML, 0, nullptr);
        CString strFileXSLPath = theApp.GetWorkingPath() + strFileXSL;
        if (theApp.MSAToolsInterface().TransformXMLToHTML(strFileXSLPath, strPreviewXML, m_strPreviewHTML))
        {
            strURL = m_strPreviewHTML;
            if(iBookmarkId != -1)
                strURL.Format(_T("%s#week%d"), (LPCTSTR)m_strPreviewHTML, iBookmarkId);
    
        }
        m_pHtmlPreview->Navigate2(strURL, 0, nullptr);
    }
    

    我发现:

    1. 锚仍然正常工作,并且可以跳到我想要的位置。
    2. Find 继续正常工作,而之前它会停止工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多