2016-11-22 5 views
1

Wie öffne ich eine neue Registerkarte, und erstellen Sie ein neues HTML-Dokument darin? Vorzugsweise mit alten Neustart erforderlichen API, wie Components.classes, Components.interfaces Zeug, aber jeder Weg, der funktioniert, ist in Ordnung.Öffnen Sie eine neue Registerkarte mit "Hallo Welt"

+0

Was für Sie * funktioniert, hängt von der Art des Add-ons ab, das Sie schreiben. Was Sie angegeben haben, bedeutet, dass Sie ein Overlay/XUL-Add-on schreiben. Ist das korrekt? Wenn ja, sollten Sie ** ernsthaft ** in Erwägung ziehen, ein WebExtension- oder Add-On-SDK-basiertes Add-on zu schreiben. Siehe [Einführung in Firefox-Add-Ons in der Dokumentation] (http://stackoverflow.com/documentation/firefox-addon/3235/introduction-to-firefox-add-ons/13574/introduction#t=201609290133319078047). – Makyen

+0

Ja, ich habe Overlay/XUL Addons. Ich überlegte, sie zu bewegen, hatte aber nicht genug Zeit dafür. Dinge, die ich wissen muss, um zu migrieren sind (1) Ist es möglich, globale Variablen/Zugriffserweiterungen über die Browser-Konsole in neuen Erweiterungen zu setzen? und (2) Gibt es noch eine Alternative zu nsIStreamListener/TracingListener in der neueren API? – Vibok

+0

Im Add-on-SDK können Sie fast alles in JavaScript machen, was Sie im Overlay- oder Bootstrap-Add-On tun könnten (offensichtlich nicht * chrome.manifest * 'overlay's). Das Add-On-SDK ist ein Bootstrapped-Add-On mit einem Wrapper. Sie können aus dem Wrapper ausbrechen, wenn Sie Dinge ausführen möchten, die nicht direkt von den Add-On-SDK-APIs unterstützt werden. – Makyen

Antwort

0

In einem meiner Add-ons, verwende ich den folgenden Code entweder eine URL in einem Tab zu öffnen oder ein Fenster:

/** 
* Open a URL in a window or a tab. 
*/ 
function openUrlInWindowOrTab(url, titleText, inWindow, makeTabActive) { 
    // Default: in tab; tab not activated 
    if(typeof (url) !== "string") { 
     return; 
    }//else 
    // Add/remove a "/" to comment/un-comment the code appropriate for your add-on type. 
    /* Add-on SDK: 
    let activeWindow = require('sdk/window/utils').getMostRecentBrowserWindow(); 
    //*/ 
    //* Overlay and bootstrap (from almost any context/scope): 
    Components.utils.import("resource://gre/modules/Services.jsm"); //Services 
    let activeWindow = Services.wm.getMostRecentWindow("navigator:browser");   
    //*/ 
    let gBrowser = activeWindow.gBrowser; 

    if(inWindow) { 
     // Set default title 
     titleText = (typeof titleText === "string") ? titleText : "Opened by [Your add-on]"; 
     //Open a window 
     return activeWindow.open(url, titleText); 
    } else { 
     //Open a tab 
     let newTab = gBrowser.addTab(url); 
     if(makeTabActive) { 
      //Make the tab active 
      gBrowser.selectedTab = newTab; 
     } 
     return newTab; 
    } 
} 

Die oben sollte in Overlay arbeiten und Bootstrapped Add-ons. Es kann auch im Add-on-SDK funktionieren, indem der Code für das Add-on-SDK auskommentiert und der Overlay/Bootstrapped-Code (die Zeile (n), die activeWindow erhalten), auskommentiert wird. Für das Add-on-SDK ist es jedoch besser, die SDK-spezifischen APIs zu verwenden.

Wenn Sie es wünschen „Hallo Welt“ zu sagen, in der neuen Registerkarte, geben Sie dann eine HTML-Datei in Ihrem chrome/content Verzeichnis und verwenden Sie eine entsprechende URL für sie (zB chrome://[as defined in your chrome.manifest]/content/helloWorld.html), wie für Ihr Add-on, die in einem content line in Ihrem chrome.manifest.