我正在尝试使用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。有什么我做错了吗?
会发生什么情况,是否创建了新标签页,该位置显示了我要发布到的网址,但该文档为空白。 Back,Forward和Reload按钮在浏览器上都显示为灰色。除了执行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
答案 0 :(得分:3)
某些特定于Mozilla的东西,并且应该与大多数浏览器合理地运行:
答案 1 :(得分:3)
答案 2 :(得分:0)
尝试使用addTab而不是loadOneTab,然后删除最后一个参数。
在Mozilla开发中心查看this page,了解有关如何打开标签的信息。
您可以使用此功能,例如:
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);
}
}
}