从POST请求创建新的ChromiumWebBrowser(作为选项卡)

时间:2015-03-28 00:52:49

标签: c# wpf cefsharp

在Chromium / Google Chrome上如果我有一个返回PDF的target =“_ blank”的POST,它会创建一个显示PDF的新窗口(或标签页)。

在我的情况下,我想强制一个新标签,但我似乎找不到办法。这是我到目前为止所尝试的内容:

  • 连接到LifeSpanHandler.OnBeforePopUp 。从这里我可以强制一个新的Tab而不是让它打开一个新的窗口,因为它喜欢。但我似乎无法获得触发PopUp的原始请求,只有Url。
  • 连接到RequestHandler.OnBeforeBrowse 。从这里我可以得到请求。但我没有办法启动ChromiumWebBrowse并传递请求。

我正在使用CefSharp.Wpf 39.0.0-pre03,我基本上是从CefSharp GitHub存储库中的“CefSharp.Wpf.Example”派生的。

关于我如何做到这一点的任何帮助或想法?

1 个答案:

答案 0 :(得分:0)

我想出了一个“不受欢迎”的解决方案。我更喜欢更健壮的东西,但是我分享我所做的事情,以便现在解决它的唯一方法。

  1. 将一个“POST with target ='_ blank'”的URL列表存储在应用程序可以检索它的位置。像app.config。
  2. LifeSpanHandler.OnBeforePopUp 中检查触发弹出窗口的网址。请注意,此方法不提供METHOD或参数,这意味着只有在此URL仅用作POST以打开新窗口时,此方法才有效。如果将相同的URL与GET或其他METHOD一起使用,则会产生不良行为。
  3. RequestHandler.OnBeforeBrowse 中检查作为POST的URL并匹配URL列表。让它调用一个创建新选项卡的函数,然后注入javascript以使用参数调用所需的POST(您可以从 OnBeforeBrowse 收到的请求中获取所有这些)
  4. 像这样我可以模仿所需的行为。问题是任何新的“情况”都需要添加一个新的URL,它必须只能触发一个新的窗口作为POST,并且永远不会触发窗口作为POST。

    此问题源于使用表单的网站,其目标为'= _ _ blank',并且所需的行为是以标签打开新窗口。