繁体   English   中英

CefSharp 搜索引擎实现

[英]CefSharp Search Engine Implamentation

我正在使用基于 cefsharp 的浏览器,我正在尝试在浏览器中实现一个搜索引擎,但是我尝试过的代码可以正常工作,它实际上没有任何错误,但是当我为项目加注星标并在文本中输入一些内容时字段没有任何反应,它不会加载我在代码中输入的搜索引擎,唯一一次文本框加载任何内容是在键入 url 时。

这是 docent 工作的浏览器中使用的代码

    private void LoadUrl(string url)
    {
        if (Uri.IsWellFormedUriString(url, UriKind.RelativeOrAbsolute))
        {
            WebUI.Load(url);
        }
        else
        {
            var searchUrl = "https://www.google.com/search?q=" + WebUtility.HtmlEncode(url);

            WebUI.Load(searchUrl);
        }
    }

我也试过

        void LoadURl(String url)
        {
            if (url.StartsWith("http"))
            {
                WebUI.Load(url);
            }
            else
            {
            WebUI.Load(url);
            }
        }

我也被建议尝试

    private void LoadUrl(string url)
    {
        if (Uri.IsWellFormedUriString(url, UriKind.RelativeOrAbsolute))
        {
            WebUI.LoadUrl(url);
        }
        else
        {
            var searchUrl = "https://www.google.com/search?q=" + Uri.EscapeDataString(url);

            WebUI.LoadUrl(searchUrl);
        }
    }

我们这里几乎没有关于您的代码如何工作的信息。 但我注意到您使用WebUtility.HtmlEncode进行搜索查询。 WebUtility还有一个WebUtility.UrlEncode方法,我理解你的问题的方式在上下文中更有意义。 这是该方法的文档: https://learn.microsoft.com/de-de/do.net/api/system.net.webutility.urlencode

您生成的 Url 无效。 您需要使用Uri.EscapeDataString将 url 参数转换为可以附加到 url 的字符串。

// For this example we check if a well formed absolute Uri was provided
// and load that Url, all others will be loaded using the search engine
// e.g. https://github.com will load directly, attempting to load
// github.com will load the search engine with github.com as the query.
// 
if (Uri.IsWellFormedUriString(url, UriKind.Absolute))
{
    chromiumWebBrowser.LoadUrl(url);
}
else
{
    var searchUrl = "https://www.google.com/search?q=" + Uri.EscapeDataString(url);

    chromiumWebBrowser.LoadUrl(searchUrl);
}

没有任何反应,它不会加载搜索引擎

您需要订阅LoadError事件以获取实际的错误消息。 向用户显示错误取决于您。 以下是一个基本示例:

chromiumWebBrowser.LoadError += OnChromiumWebBrowserLoadError;

private void OnChromiumWebBrowserLoadError(object sender, LoadErrorEventArgs e)
{
    //Actions that trigger a download will raise an aborted error.
    //Aborted is generally safe to ignore
    if (e.ErrorCode == CefErrorCode.Aborted)
    {
        return;
    }

    var errorHtml = string.Format("<html><body><h2>Failed to load URL {0} with error {1} ({2}).</h2></body></html>",
                                      e.FailedUrl, e.ErrorText, e.ErrorCode);

    _ = e.Browser.SetMainFrameDocumentContentAsync(errorHtml);
}

出于测试目的,您还可以复制并粘贴您生成的searchUrl字符串,然后尝试将其加载到Chrome中以查看会发生什么,您也应该会收到错误消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM