Как Вы выполняете запрос сообщения в новую вкладку браузера с помощью JavaScript / XUL?

Вы не можете этого сделать, вы уже находитесь в цикле обработки сообщений (это то, что называется функцией on_message) в момент, когда вы вызываете публикацию. Это вызовет очередь исходящих сообщений, которые будут обрабатываться следующей итерацией цикла, поэтому они отправляются после возвращения on_message.

Он зависает, когда вы вызываете метод цикла, потому что цикл уже запущен.

В любом случае вы не должны делать вызовы блокировки (сна) в обратном вызове on_message, если вам нужно делать то, что требуется время, запустите второй поток, чтобы сделать это. Делая это, вы освобождаете сетевой цикл, чтобы обрабатывать исходящие публикации, как только они сделаны.

6
задан Yeldar Kurmangaliyev 20 November 2015 в 11:37
поделиться

3 ответа

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

3
ответ дан 17 December 2019 в 02:36
поделиться

попробуйте 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);
    }
  }
}
0
ответ дан 17 December 2019 в 02:36
поделиться

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

  • Создайте скрытую форму с полями, настраивает способ, которым Вам нужны они
  • Удостоверьтесь, что "целевой" атрибут формы установлен на "_BLANK"
  • Отправьте форму программно
3
ответ дан 17 December 2019 в 02:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: