Как сделать запрос на публикацию в новой вкладке браузера с помощью JavaScript / XUL? - PullRequest
6 голосов
/ 30 августа 2008

Я пытаюсь открыть новую вкладку браузера с результатами запроса 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, а данные JSON в качестве postData. Я что-то не так делаю?

Что произойдет, если будет создана новая вкладка, в расположении отображается 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

Ответы [ 3 ]

3 голосов
/ 30 августа 2008

Что-то менее специфичное для Mozilla и должно работать достаточно хорошо с большинством браузеров:

  • Создайте скрытую форму с полями, установленными так, как вам нужно
  • Убедитесь, что для атрибута "target" формы установлено значение "_BLANK"
  • Отправьте форму программно
3 голосов
/ 31 августа 2008

Ответ на этот вопрос нашел shog9 . Параметр postData должен быть объектом nsIMIMEInputStream, как описано в здесь .

0 голосов
/ 30 августа 2008

попробуйте добавить addTab вместо loadOneTab и удалите последний параметр.

Посетите эту страницу в Центре разработки 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);
    }
  }
}
...