Cefsharp对话框出现在屏幕外

我正在从我的网站加载cefsharp中的网页,该网页仅在iframe中保存了fb之类的插件

<!DOCTYPE html>
<html>
<head>
    <title>Like our Facebook page</title>
</head>
<body>
<iframe src="https://www.facebook.com/plugins/like.php?href=https%3A%2F%2Fwww.facebook.com%2Fmypage%2F&width=450&layout=standard&action=like&size=small&show_faces=true&share=true&height=80&appId=realappid" width="450" height="80" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowTransparency="true"></iframe>
</body>
</html>

它可以很好地加载页面,但是当我单击“赞”按钮时,它会显示屏幕外的Facebook登录对话框,即使我从任务栏中单击它也无法将其显示在前面。

Cefsharp对话框出现在屏幕外

Cefsharp对话框出现在屏幕外

形式

public ChromiumWebBrowser socialBrowser;

//LOAD FB LIKE PAGE

socialBrowser = new ChromiumWebBrowser("http://mywebsite.com/fb.html")
{
    RequestHandler = new BrowserRequestHandler()
};

fb iframe本身会出现问题吗? 这是附加到浏览器实例的BrowserRequestHandler类。

class BrowserRequestHandler : IRequestHandler
{

    bool OnBeforePluginLoad(IWebBrowser browser,string url,string policyUrl,WebpluginInfo info)
    {
        return false;
    }


    bool OnCertificateError(IWebBrowser browser,CefErrorCode errorCode,string requestUrl)
    {
        return false;
    }

    void OnPluginCrashed(IWebBrowser browser,string pluginPath)
    {
    }

    void OnRenderProcessTerminated(IWebBrowser browserControl,IBrowser browser,CefTerminationStatus status)
    {
    }

    IResponseFilter GetResourceResponseFilter(IWebBrowser browserControl,IFrame frame,IRequest request,IResponse response)
    {
        return null;
    }

    bool OnCertificateError(IWebBrowser browserControl,string requestUrl,ISslInfo sslInfo,IRequestCallback callback)
    {
        return false;
    }

    bool OnOpenUrlFromTab(IWebBrowser browserControl,string targetUrl,WindowOpenDisposition targetDisposition,bool userGesture)
    {
        return false;
    }

    void OnPluginCrashed(IWebBrowser browserControl,string pluginPath)
    {
    }

    bool OnProtocolExecution(IWebBrowser browserControl,string url)
    {
        return false;
    }

    bool OnQuotaRequest(IWebBrowser browserControl,string originUrl,long newSize,IRequestCallback callback)
    {
        return false;
    }

    void OnRenderViewReady(IWebBrowser browserControl,IBrowser browser)
    {
    }

    void OnResourceLoadComplete(IWebBrowser browserControl,IResponse response,UrlRequestStatus status,long receivedContentLength)
    {
    }

    void OnResourceRedirect(IWebBrowser browserControl,ref string newUrl)
    {
    }

    bool OnResourceResponse(IWebBrowser browserControl,IResponse response)
    {
        return false;
    }

    bool OnSelectClientCertificate(IWebBrowser browserControl,bool isProxy,string host,int port,X509Certificate2Collection certificates,ISelectClientCertificateCallback callback)
    {
        return false;
    }

    void OnResourceRedirect(IWebBrowser browserControl,ref string newUrl)
    {

    }

    bool IRequestHandler.OnBeforeBrowse(IWebBrowser chromiumWebBrowser,bool userGesture,bool isRedirect)
    {
        string url = chromiumWebBrowser.Address;
        if (url.Contains("#download-this-video-mp3"))
        {
            frmMainNew.DownloadVideoFromPage.StartDowbload(url,"mp3");
            return true;
        }
        else if (url.Contains("#download-this-video-mp4"))
        {
            frmMainNew.DownloadVideoFromPage.StartDowbload(url,"mp4");
            return true;
        }

        return false;
    }

    bool IRequestHandler.OnOpenUrlFromTab(IWebBrowser chromiumWebBrowser,bool userGesture)
    {
        return false;
    }

    bool IRequestHandler.OnCertificateError(IWebBrowser chromiumWebBrowser,IRequestCallback callback)
    {
        return false;
    }

    void IRequestHandler.OnPluginCrashed(IWebBrowser chromiumWebBrowser,string pluginPath)
    {

    }

    bool IRequestHandler.OnSelectClientCertificate(IWebBrowser chromiumWebBrowser,ISelectClientCertificateCallback callback)
    {
        return false;
    }

    void IRequestHandler.OnRenderProcessTerminated(IWebBrowser chromiumWebBrowser,CefTerminationStatus status)
    {

    }

    bool IRequestHandler.OnQuotaRequest(IWebBrowser chromiumWebBrowser,IRequestCallback callback)
    {
        return false;
    }


    void IRequestHandler.OnRenderViewReady(IWebBrowser chromiumWebBrowser,IBrowser browser)
    {

    }

    public bool OnJSDialog(IWebBrowser browserControl,CefJsDialogType dialogType,string messageText,string defaultPromptText,IJsDialogCallback callback,ref bool suppressMessage)
    {
        callback.Continue(true);
        return true;
    }

    public IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser,bool isnavigation,bool isDownload,string requestInitiator,ref bool disableDefaultHandling)
    {
        return null;
    }

    public bool GetauthCredentials(IWebBrowser chromiumWebBrowser,string realm,string scheme,IAuthCallback callback)
    {
       return false;
    }
}
tmc19850121 回答:Cefsharp对话框出现在屏幕外

ILifeSpanHandler已解决

public bool OnBeforePopup(IWebBrowser chromiumWebBrowser,IBrowser browser,IFrame frame,string targetUrl,string targetFrameName,WindowOpenDisposition targetDisposition,bool userGesture,IPopupFeatures popupFeatures,IWindowInfo windowInfo,IBrowserSettings browserSettings,ref bool noJavascriptAccess,out IWebBrowser newBrowser)
{
      ChromiumWebBrowser wb = new ChromiumWebBrowser(targetUrl);
      wb.Size = new System.Drawing.Size(windowInfo.Width,windowInfo.Height);
      wb.Location = new System.Drawing.Point(windowInfo.X,windowInfo.Y);

      newBrowser = wb;

      return false;
}
本文链接:https://www.f2er.com/2987732.html

大家都在问