2008-08-30 4 views
6

私はPOSTリクエストの結果で新しいブラウザタブを開こうとしています。私は、URLなどの文字列を使用していJavaScript/XULを使用して新しいブラウザタブに投稿リクエストを作成するにはどうすればよいですか?

var windowManager = Components.classes["@mozilla.org/appshell/window-mediator;1"] 
    .getService(Components.interface 
s.nsIWindowMediator); 
var browserWindow = windowManager.getMostRecentWindow("navigator:browser"); 
var browser = browserWindow.getBrowser(); 
if(browser.mCurrentBrowser.currentURI.spec == "about:blank") 
    browserWindow.loadURI(url, null, postData, false); 
else 
    browser.loadOneTab(url, null, null, postData, false, false); 

、およびPOSTDATAとしてJSONデータ:私は、次のコードを含む関数を使用して、そうしようとしています。私が間違っていることはありますか?

新しいタブが作成され、場所には投稿したいURLが表示されますが、ドキュメントは空白です。 [戻る]、[進む]、および[再読み込み]ボタンは、すべてブラウザ上でグレー表示されます。それはPOSTを実行する以外はすべてを行ったようです。 postDataパラメータをオフのままにしておくと、GETが正しく実行されます。

ビルドID:Mozillaの/ 5.0(Macintosh版; U;インテルのMac OS X 10.5; EN-US; RV:1.9.0.1)のGecko/2008070206 Firefoxの/ 3.0.1

答えて

0

、addTabの代わりloadOneTabてみてください最後のパラメータを削除します。

タブを開く方法については、Mozilla開発センターのthis pageを参照してください。

次の例のように、この機能を使用することができます:小さいMozillaの固有のものであり、ブラウザのほとんどは合理的にうまく動作するはず

function openAndReuseOneTabPerURL(url) { 
    var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] 
        .getService(Components.interfaces.nsIWindowMediator); 
    var browserEnumerator = wm.getEnumerator("navigator:browser"); 

    // Check each browser instance for our URL 
    var found = false; 
    while (!found && browserEnumerator.hasMoreElements()) { 
    var browserInstance = browserEnumerator.getNext().getBrowser(); 

    // Check each tab of this browser instance 
    var numTabs = browserInstance.tabContainer.childNodes.length; 
    for(var index=0; index<numTabs; index++) { 
     var currentBrowser = browserInstance.getBrowserAtIndex(index); 
     if ("about:blank" == currentBrowser.currentURI.spec) { 

     // The URL is already opened. Select this tab. 
     browserInstance.selectedTab = browserInstance.tabContainer.childNodes[index]; 

     // Focus *this* browser 
     browserInstance.focus(); 
     found = true; 
     break; 
     } 
    } 
    } 

    // Our URL isn't open. Open it now. 
    if (!found) { 
    var recentWindow = wm.getMostRecentWindow("navigator:browser"); 
    if (recentWindow) { 
     // Use an existing browser window 
     recentWindow.delayedOpenTab(url, null, null, null, null); 
    } 
    else { 
     // No browser windows are open, so open a new one. 
     window.open(url); 
    } 
    } 
} 
4

何か:

  • をフィールドと非表示のフォームを作成します。
  • フォームの "target"属性が "_BLANK"に設定されていることを確認してください
  • プログラムでフォームを送信
3

答えはshog9です。 postDataパラメータは、hereに記載されているnsIMIMEInputStreamオブジェクトである必要があります。

関連する問題