Вы не можете этого сделать, вы уже находитесь в цикле обработки сообщений (это то, что называется функцией on_message) в момент, когда вы вызываете публикацию. Это вызовет очередь исходящих сообщений, которые будут обрабатываться следующей итерацией цикла, поэтому они отправляются после возвращения on_message.
Он зависает, когда вы вызываете метод цикла, потому что цикл уже запущен.
В любом случае вы не должны делать вызовы блокировки (сна) в обратном вызове on_message, если вам нужно делать то, что требуется время, запустите второй поток, чтобы сделать это. Делая это, вы освобождаете сетевой цикл, чтобы обрабатывать исходящие публикации, как только они сделаны.
Ответ на это был найден shog9. Параметр постданных должен быть a nsIMIMEInputStream
возразите, как детализировано в здесь.
попробуйте 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);
}
}
}
Что-то, что является меньшим количеством конкретного Mozilla и должно работать обоснованно хорошо с большинством браузеров: