6

POSTリクエストの結果を含む新しいブラウザタブを開こうとしています。次のコードを含む関数を使用してこれを実行しようとしています。

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);

urlとして文字列を使用し、postDataとしてJSONデータを使用しています。私が間違っていることはありますか?

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

ビルド識別子:Mozilla / 5.0(Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.1)Gecko / 2008070206 Firefox / 3.0.1

4

3 に答える 3

3

Mozilla 固有のものではなく、ほとんどのブラウザで適切に動作するもの:

  • 必要な方法でフィールドを設定して非表示のフォームを作成する
  • フォームの「ターゲット」属性が「_BLANK」に設定されていることを確認してください
  • プログラムでフォームを送信する
于 2008-08-30T18:16:47.877 に答える
3

これに対する答えはshog9によって見つかりました。postData パラメーターは、こちらでnsIMIMEInputStream詳しく説明されているように、オブジェクトである必要があります。

于 2008-08-31T17:54:40.777 に答える
0

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

タブを開く方法については、Mozilla Development Center のこのページを参照してください。

たとえば、この関数を使用できます。

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);
    }
  }
}
于 2008-08-30T18:07:48.367 に答える