3

、私が使用していたブラウザ知る明確な方法はありますか?私は、さまざまなブラウザで異なる操作を行う必要があります。拡張機能のバックグラウンドスクリプトがどのブラウザで実行されているかを確認するにはどうすればよいですか?私はChromeの拡張機能は、Firefox WebExtensions、エッジ拡張...背景スクリプトではなく、コンテンツスクリプトで</p> <p>について話している

はい、navigator.userAgentは役に立ちますが、はあまり明確ではありません

これを行うために使用できる拡張APIはありますか?何かのように、chrome.extension.browserType。 (もちろん、これは実際には存在しません..)

答えて

3

現在使用されているブラウザを特定するAPIはありません。共通の拡張フレームワークをサポートする主要なブラウザのメリットの1つは、複数のブラウザをサポートする単一のコードベースを持つことができることです。該当するすべてのブラウザから利用可能な機能が増えていますが、常にいくつかの違いがあります。これらの違いは、サポートされているものだけではありませんが、特定のAPIの効果の詳細や、APIの使用方法などの詳細が記載されています。 したがって、コードによって現在実行されているブラウザを特定できることが必要な場合があります。

top-voted answer to "How to detect Safari, Chrome, IE, Firefox and Opera browser?"から利用できるいくつかの良いコードがあります。ただし、拡張環境で動作するには、いくつかの変更が必要です。

その答えのコードに基づいて

、次のように検出します:

  • エッジ
  • Firefoxの
  • オペラ
  • ビンクエンジン
  • // Opera 8.0+ (tested on Opera 42.0) 
    var isOpera = (!!window.opr && !!opr.addons) || !!window.opera 
           || navigator.userAgent.indexOf(' OPR/') >= 0; 
    
    // Firefox 1.0+ (tested on Firefox 45 - 53) 
    var isFirefox = typeof InstallTrigger !== 'undefined'; 
    
    // Internet Explorer 6-11 
    // Untested on IE (of course). Here because it shows some logic for isEdge. 
    var isIE = /*@[email protected]*/false || !!document.documentMode; 
    
    // Edge 20+ (tested on Edge 38.14393.0.0) 
    var isEdge = !isIE && !!window.StyleMedia; 
    
    // Chrome 1+ (tested on Chrome 55.0.2883.87) 
    // This does not work in an extension: 
    //var isChrome = !!window.chrome && !!window.chrome.webstore; 
    // The other browsers are trying to be more like Chrome, so picking 
    // capabilities which are in Chrome, but not in others is a moving 
    // target. Just default to Chrome if none of the others is detected. 
    var isChrome = !isOpera && !isFirefox && !isIE && !isEdge; 
    
    // Blink engine detection (tested on Chrome 55.0.2883.87 and Opera 42.0) 
    var isBlink = (isChrome || isOpera) && !!window.CSS; 
    
    /* The above code is based on code from: https://stackoverflow.com/a/9851769/3773011 */  
    //Verification: 
    var log = console.log; 
    if(isEdge) log = alert; //Edge console.log() does not work, but alert() does. 
    log('isChrome: ' + isChrome); 
    log('isEdge: ' + isEdge); 
    log('isFirefox: ' + isFirefox); 
    log('isIE: ' + isIE); 
    log('isOpera: ' + isOpera); 
    log('isBlink: ' + isBlink); 
    

    • Chromeを常に実装間、少なくとも、微妙な違いとなってしまいます別のブラウザのように複雑で多様なものとのインタフェースAPIの
      1. 異なる実装。現在、違いの多くは微妙ではありません。
      2. Mozillaは、他のブラウザでは現在利用できないWebExtensionsの機能を、chrome.*/browser.*のAPIを拡張して実装しようとしていることを明示しています。これが行われている1つの方法は、WebExtensions Experimentsというメカニズムがあり、これはMozilla以外の開発者がWebExtensionsの追加機能を実装するためのものです。そのような機能は、承認されれば、ストックFirefoxビルドに移行される予定です。
    関連する問題