2016-11-22 4 views
1

新しいタブを開き、その中に新しいHTMLドキュメントを作成する方法は?古い再起動が必要なAPI(Components.classesComponents.interfacesなど)を使用することをお勧めしますが、動作する方法は問題ありません。私は、タブやウィンドウのいずれかでURLを開くには、次のコードを使用して、私のアドオンの一つで"hello world"で新しいタブを開きます

+0

あなたのために*動作する予定は*あなたが書いているアドオンの種類によって異なります。あなたが述べたことは、あなたがOverlay/XULアドオンを書いていることを意味します。あれは正しいですか?もしそうなら、WebExtensionやAdd-on SDKベースのアドオンの作成を真剣に**考えてください。 [ドキュメントのFirefoxアドオンの紹介](http://stackoverflow.com/documentation/firefox-addon/3235/introduction-to-firefox-add-ons/13574/introduction#t=201609290133319078047)を参照してください。 – Makyen

+0

はい、私はOverlay/XULアドオンを持っています。私はそれらを動かすことを考えましたが、そうするには十分な時間がありませんでした。移行するために知っておく必要があることは、(1)新しい拡張でブラウザコンソールを介してグローバル変数/アクセス拡張の状態を設定することは可能ですか? (2)新しいAPIにnsIStreamListener/TracingListenerの代替手段はありますか? – Vibok

+0

アドオンSDKでは、オーバーレイやブートストラップのアドオン(もちろん、* chrome.manifest * 'overlay'sではありません)で行うことができるJavaScriptのほとんどを実行できます。アドオンSDKは、ラッパーを備えたブートストラップされたアドオンです。アドオンSDK APIによって直接サポートされていないことをしたいときに、ラッパーから脱出することができます。 – Makyen

答えて

0

、:

/** 
* 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; 
    } 
} 

上記は、オーバーレイとブートストラップアドオンで動作するはずです。また、アドオンSDKのコードのコメントを外し、オーバーレイ/ブートストラップコード(activeWindowを取得した行)をコメントアウトして、アドオンSDKで動作することもできます。ただし、アドオンSDKでは、SDK固有のAPIを使用する方がよいでしょう。

あなたはcontent lineであなたのアドオンのために定義されたとして、それは、(例えばchrome://[as defined in your chrome.manifest]/content/helloWorld.html)、その後、あなたのchrome/contentディレクトリにHTMLファイルを提供し、それに対して適切なURLを使用して、新しいタブでの「Hello World」を言いたい場合あなたのchrome.manifest