2016-07-04 9 views
0
window.onerror=function(err,url,line){ 
    if(err=='boom'){ 
     console.log(true); 
     } 
    else{ 
     console.log(false); 
     }}; 

console.error('boom'); 

Dies gibt aus!Versuchen, Google Chrome Cast zu erkennen und stoppen Sie es Dinge zu verlangsamen

Wie kann ich im Java-Skript erkennen, welchen Text der Fehler enthält?

Ich versuche, Google Chrome Cast-Erweiterung Fehler

konnte nicht ermitteln Ressource laden: net :: ERR_ADDRESS_UNREACHABLE Chrom-Erweiterung: //boadgeojelhgndaghljhdicfkmllpafd/cast_sender.js

bezogen werden: Google chrome cast sender error if chrome cast extension is not installed or using incognito

Meine Argumentation ist

//​tried to detect chromecast extension id: boadgeojelhgndaghljhdicfkmllpafd 
//it looks like it is protected from detection (tried: http://blog.kotowicz.net/2012/02/intro-to-chrome-addons-hacking.html) 
//if they are using: 
//chrome flash   ===flash  (needs double click as &autoplay=1 lets the user do only one click but it side-effects with no video preview) 
//chrome  chromeCast===fastjs (google are being bad players here!) 
//chrome     ===slowjs (almost unusable website) 
//chrome flash chromeCast===flash ffsake! (maybe try one video then see if there are errors and put a cookie, chromecast=true means that we got no errors so we don't need flash!) todo:how to analyse error text? 
//if the user is on chrome and does not have flash then they are youtubes 'exception'! they will have very crap loading times 


var chrome=0; 
if(/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor)){ 
    chrome=1; 
    function detectPlugin(substrs){ 
     if(navigator.plugins){ 
      for(var i=0,l=navigator.plugins.length;i<l;i++){ 
       var plugin=navigator.plugins[i] 
       , haystack=plugin.name+plugin.description 
       , found=0; 
       for(var j=0;j<substrs.length;j++){ 
        if(haystack.indexOf(substrs[j])!=-1){found++;} 
        } 
       if(found==substrs.length){return true;} 
       }} 
      return false; 
      } 
     var detectFlash=[/*"Shockwave",*/"Flash"]; //not entirely sure how relevant shockwave is here 
     if(detectPlugin(detectFlash)){chrome=2;} 
     } 

dann erstelle ich einen iframe mit:

'https://www.youtube.com/'+(chrome==2?'v':'embed')+'/'+ytvidcode 

wo ytvidcode die ID des Videos youtube ist

v ist für den entwerteten Flash einbetten während embed für die html5 ist (gebrochene/wont fix) einbetten

So ist der obige Code Chrom erkennt dann versucht, den Blitz zu erkennen, kann jedoch keinen Chrom-Cast erkennen.

Wenn der Benutzer sowohl Chrome-Cast als auch Flash hat (da er keine Chrome-Cast/Chrome-Cast-Fehler erkennen kann), wird er Flash erzwingen, wenn er vorhanden ist.

Wenn Flash nicht vorhanden ist, dann wird der Benutzer eine beschissene youtube einbetten Erfahrung haben (sie könnten einen anderen Browser verwenden)

Ist es möglich, die Fehler, die durch Chromguss oder anderen Fußabdruck zu detektieren seine Präsenz?

weil, wenn es eine installierte Erweiterung ist, dann sollte es vollständig als Flash verwendet werden, wird

abgeschrieben
window.onerror=function(e,url,line){console.dir(arguments);}//nope 

window.onerror=function(e,url,line){console.dir(this);}//nope 

https://github.com/Valve/fingerprintjs2

new Fingerprint2().get(function(result, components){ 
    console.log(result); //a hash, representing your device fingerprint 
    console.log(components); // an array of FP components 
    }); 

components[13] ("regular_plugins") zeigt Kein Google Cast, obwohl ich es heute installiert habe


Das einzige, was ich an dieser Stelle denken kann, ist der Laden eines ihrer Videos zu Zeit (wenn sie auf chome sind und es zu lange dauert das Test-Video zu laden, dann müssen sie nicht Chromguss haben), diese https://developers.google.com/youtube/iframe_api_reference#Getting_Started und einen Timer und ein Cookie nach (so der Test nur einmal passiert) ... ich werde prüfen zurück vielleicht dann

Antwort

0

Auf diese Weise können die Videos verwenden embed wenn nicht Chrom oder wenn sie mit diesem Bericht auf Chrome mit Cast Extension aktiviert.

Wenn sie auf Chrom ohne Guss sind, dann prüft sie auf Blitz und wenn sie Blitz unterstützen, dann benutzt sie v.

Wenn sie chrom ohne Äther gegossen oder Blitz haben dann (sie werden nur die Chromgussfehler erhalten, ist es ihre Schuld an dieser Stelle!)

v ist für den entwerteten Flash einbetten während embed für die ist html5 (broken/wont fix) einbetten.

Könnte vielleicht mit Verbesserungen tun ...

<!DOCTYPE html> 
<html> 
    <head> 
     <script type="text/javascript" src="//www.gstatic.com/cv/js/sender/v1/cast_sender.js"></script> 
     <script type="text/javascript"> 
      function proceed(how){ 
       document.getElementById('vid').innerHTML='<iframe src="https://www.youtube.com/'+how+'/M_lHI1opADk"></iframe>'; 
       console.log(ischrome,iscast); 
       } 
      var ytv=['embed','v','embed','v']; 
      var ischrome=0; 
      var iscast=true;//maybe 
      if(/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor)){ 
       ischrome=1; 
       setTimeout(function(){ 
        try{new chrome.cast.SessionRequest('794B7BBF');} 
        catch(e){console.log(e); 
         iscast=false;} 
        finally{ 
         (iscast==true)&&(ischrome=2); 
         if(ischrome==1){ 
          function hasflash(){if(navigator.plugins){for(var i=0,l=navigator.plugins.length;i<l;i++){if((navigator.plugins[i].name+navigator.plugins[i].description).indexOf("Flash")!=-1){return true;}}}return false;} 
          if(hasflash()){ischrome=3;} 
          proceed(ytv[ischrome]); 
          } 
         else{ 
          proceed(ytv[ischrome]); 
          }}},1000);} 
      else{proceed(ytv[ischrome]);} 
     </script> 
    </head> 
    <body> 
     <div id="vid"></div> 
    </body> 
</html> 

Sie können dies testen, indem Sie die Cast-Erweiterung Sperrung der Installation/Aktivierung und die Seite aktualisieren.

+1

Vergessen Sie nicht, die Antwort zu akzeptieren (https://stackoverflow.com/help/someone-answers). – abraham

+0

danke für die Änderungen, ich muss bis morgen warten –