2010-12-16 8 views
3

In einer Chrome-Erweiterung kann ein Skript als Inhaltsskript oder Hintergrundskript enthalten sein. Die meisten Sachen, die es tut, sind gleich, aber es gibt einige, die je nach Kontext unterschiedlich sind.Wie kann man feststellen, ob ein Skript als Inhalts- oder Hintergrundskript ausgeführt wird?

Die Frage ist, wie könnte ein Skript sagen, in welchem ​​Kontext es ausgeführt wird? Danke.

+0

Wenn Sie die Erweiterung entwickeln, können Sie das Skript sicher in den bevorzugten Kontext laden? –

+0

@Anon .: Ja kann ich, aber ich wie gesagt im Thema brauche ich vielleicht eine andere Implementierung entsprechend der Plattform und ich möchte meinen Code wegen dieser Einschränkungen nicht brechen. –

+0

Ich stimme mit Anon überein. Dies sollte sozusagen zur Build/Deploy-Zeit gehandhabt werden. Sie könnten ein Build-Skript schreiben, um zwei verschiedene Versionen nach Bedarf bereitzustellen. Die Überprüfung zur Laufzeit ist jedes Mal sehr ineffizient. –

Antwort

3

Nun konnte ich diese Arbeit aus.

var scriptContext = function() { 
    try { 
     if (chrome.bookmarks) { 
      return "background"; 
     } 
     else { 
      return "content"; 
     } 
    } 
    catch (e) { 
     return "content"; 
    } 
} 

Es ist, weil eine Ausnahme, wenn der Inhalt Skript geworfen würde versucht, den Chrom zuzugreifen * Teile außer chrome.extension.

Referenz: http://code.google.com/chrome/extensions/content_scripts.html

+0

Dieser Ansatz hat zwei Probleme, eines, es beruht auf Try Catch, die wirklich langsam ist. zwei, gibt es drei Kontexte in einer Chrome-Erweiterung; Erweiterungsseiten, Hintergrundskripts und Inhaltsskripts. Dies erkennt nur Zustände und nicht alle drei. –

3

Ich denke, das eine ziemlich robuste Version ist, die in meinem ersten Test gearbeitet und keine langsame try catch erfordern, und es identifiziert zumindest die drei Primär Kontexte einer Chrome-Erweiterung, und soll Lass dich wissen, ob du auch auf der Basisseite bist.

av = {}; 
av.Env = { 
    isChromeExt: function(){ 
     return !!(window['chrome'] && window['chrome']['extension']) 
    }, 
    getContext: function(){ 
     var loc = window.location.href; 
     if(!!(window['chrome'] && window['chrome']['extension'])){ 
      if(/^chrome/.test(loc)){ 
       if(window == chrome.extension.getBackgroundPage()){ 
        return 'background'; 
       }else{ 
        return 'extension'; 
       } 
      }else if(/^https?/.test(loc)){ 
       return 'content'; 
      } 
     }else{ 
      return window.location.protocol.replace(':',''); 
     } 
    } 
}; 
Verwandte Themen