2008-08-30 4 views
6

Я пытаюсь открыть новую вкладку браузера с результатами запроса POST. Я пытаюсь сделать это, используя функцию, содержащую следующий код:Как сделать запрос на новую вкладку браузера с помощью 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); 

Я использую строку как URL, и данные в формате JSON как PostData. Есть ли что-то, что я делаю неправильно?

Что происходит, создается новая вкладка, в местоположении отображается URL-адрес, который я хочу отправить, но документ пуст. Кнопки «Назад», «Вперед» и «Обновить» не отображаются в браузере. Кажется, он сделал все, кроме выполнения POST. Если оставить параметр postData выключенным, то он правильно запускает GET.

Сложение Идентификатор: Mozilla/5.0 (compatible; Intel Mac OS X 10.5; EN-US; с.в.: 1.9.0.1) Gecko/2008070206 Firefox/3.0.1

ответ

0

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

Оформить заявку 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

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

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

Ответ на этот отзыв был найден shog9. Параметр postData должен быть nsIMIMEInputStream, как указано в here.