2008-08-30 12 views
6

Próbuję otworzyć nową kartę przeglądarki z wynikami żądania POST. Próbuję to zrobić przy użyciu funkcji zawierające następujący kod:Jak utworzyć prośbę o wpis w nowej karcie przeglądarki przy użyciu 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); 

Używam ciąg jako URL, a dane JSON jak postData. Czy jest coś, co robię źle?

Co się dzieje, jest tworzona nowa karta, lokalizacja pokazuje adres URL, który chcę opublikować, ale dokument jest pusty. Przyciski Wstecz, Prześlij dalej i Przeładuj są wyszarzone w przeglądarce. Wygląda na to, że zrobił wszystko, z wyjątkiem wykonania POST. Jeśli zostanę wyłączony parametr postData, to poprawnie uruchomi GET.

identyfikator Budowa: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv: 1.9.0.1) Gecko/2008070206 Firefox/3.0.1

Odpowiedz

0

spróbuj addTab zamiast loadOneTab, i usuń ostatni parametr.

Zapoznaj się z this page w witrynie Mozilla Development Center, aby uzyskać informacje na temat otwierania kart.

Można użyć tej funkcji, na przykład:

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

coś, co jest mniej Mozilla specyficzne i powinny pracować w miarę dobrze z większością przeglądarek:

  • Tworzenie ukrytą formę z pól ustaw tak, jak ich potrzebujesz
  • Upewnij się, że atrybut "cel" formularza jest ustawiony na "_BLANK"
  • Wyślij formularz programowo
3

Odpowiedź na to pytanie została znaleziona przez shog9. Parametr postData musi być obiektem nsIMIMEInputStream, jak szczegółowo opisano w here.

Powiązane problemy