【问题标题】:Detecting if browser or CEF/Electron检测浏览器或 CEF/Electron
【发布时间】:2018-05-16 11:27:13
【问题描述】:

有没有一种方法可以检测我的 JS 代码是在真实浏览器中运行还是在 CEF 或 Electron 等工具包中运行?

【问题讨论】:

  • 您可以参考的环境中可能有很多小的差异,但是您为什么要关心呢?使用特征检测。
  • 我很在意,因为我正在开发的 Web 应用应该只在 CEF 中显示/隐藏某些按钮。

标签: javascript electron chromium-embedded


【解决方案1】:

如果您可以控制托管 CEF 控件的应用,则可以注册要绑定的对象,如下所示:

chromeBrowser.JavascriptObjectRepository.Register("boundAsync", new CefCustomObject(chromeBrowser), true);

CefCustomObject 类:

class CefCustomObject
{
    // Declare a local instance of chromium and the main form in order to execute things from here in the main thread
    private static ChromiumWebBrowser _instanceBrowser = null;

    public CefCustomObject(ChromiumWebBrowser originalBrowser)
    {
        _instanceBrowser = originalBrowser;
    }
}

然后您可以在 Web 应用程序中检查此对象是否存在。 网页应用中的 javascript:

(async function()
{
    if ("CefSharp" in window) {
        await CefSharp.BindObjectAsync("boundAsync");

        if (boundAsync) {
            alert('running inside CEF')
        }
    }
})();

来源:

【讨论】:

    【解决方案2】:

    因为 Electron 应用中的用户代理是这样的:

    Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) websat/0.0.1 Chrome/61.0.3163.100 Electron/2.0.0 Safari/537.36

    你可以试试这个:

    if(navigator.userAgent.indexOf('Electron') !== -1) {
        console.log('Electron app');
        }
    else {
        console.log('not in Electron app');
        }  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-17
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 2011-09-24
      • 2011-07-25
      相关资源
      最近更新 更多